Znalezienie rozdzielczości obrazu w pliku PDF?

15

Mam problem z tym, że niektórzy użytkownicy tworzą bardzo duże pliki PDF. Z drugiej strony mam pliki PDF wysłane z naszych faksów, które są naprawdę małe i całkowicie do wydruku. Moje pytanie brzmi

  • Czy jest jakiś sposób na znalezienie rozdzielczości (DPI) pliku PDF. Przeszukuję internet, nie mogę znaleźć odpowiedzi. Sprawdziłem właściwości pliku, ta informacja nie była tam przechowywana, przynajmniej w moim przypadku.
  • Jaka jest optymalna rozdzielczość konwersji pliku tekstowego na obraz PDF? 96dpi, 300dpi lub więcej?
  • Zabawne pytanie. Czy mogę zmienić rozmiar pliku PDF, który został zeskanowany przy wysokiej rozdzielczości na mniejszą?

Wiem, że niektóre odpowiedzi mogą być niedostępne, ponieważ przeszukałem już Internet i nie mogłem znaleźć odpowiedzi.

Uwaga: Mój plik PDF to w całości obrazy, tekst na obrazy. Znam również primoPDF (za darmo) coś, z czym możesz eksperymentować

hk_
źródło

Odpowiedzi:

18

Odpowiedź slhck i komentarz Scrusa zasługują na aktualizację: pdfimagesteraz (przynajmniej od wersji 0.26.5) jawnie wyświetla listę x-ppii y-ppi. Oto przykładowy wynik:

$ pdfimages -list example.pdf 
page   num  type   width height color comp bpc  enc interp  object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
   1     0 image    2244  2244  cmyk    4   8  image  no       215  0   301   301  418K 2.1%
   2     1 image     900   600  rgb     3   8  image  no       324  0  1524  1525 35.5K 2.2%

Na Debianie (Wheezy) i Fedorze (23), pdfimagesjest częścią poppler-utilspakietów.

Skippy le Grand Gourou
źródło
Moje są puste
theonlygusti
8

Wiem, że nie chcesz wyodrębniać danych obrazu, ale jest to prawdopodobnie jedyny sposób na znalezienie oryginalnej rozdzielczości.


W * nix, jeśli masz zainstalowane ImageMagick's identifyi Xpdf 1 :

pdfimages -j test.pdf test && for file in $(find . -name "test*.jpg"); do identify "$file"; done

Gdzie test.pdfjest twój wejściowy plik PDF. Pliki wyjściowe są zapisywane w test-000.jpg, test-001.jpgitd. Dałoby to oryginalny rozmiar wszystkich zawartych obrazów tego pliku PDF 2 .

Przykładowe dane wyjściowe dla pliku PDF zawierającego tylko jeden duży obraz:

./test-000.jpg JPEG 2500x1961 2500x1961+0+0 8-bit DirectClass 1.022MB 0.000u 0:00.000

1) Windows też je ma, ale skrypt byłby oczywiście inny.
2) Należy pamiętać, że obrazy tak naprawdę nie zawierają informacji DPI. Mówiąc wprost: jest to po prostu coś używanego do drukowania, a obrazy nie potrzebują nieodłącznej miary DPI.


Jaka jest optymalna rozdzielczość konwersji pliku tekstowego na obraz PDF? 96dpi, 300dpi lub więcej?

Zasadniczo wszystko, co chcesz wydrukować, powinno mieć rozdzielczość 300 dpi lub więcej. Większość drukarek będzie również obsługiwać wyższą rozdzielczość.

slhck
źródło
2
Wersja pdfimages (być może bardziej aktualne niż oryginalne pytanie) z projektu Poppler dodaje -list opcję: pdfimages -list test.pdf. Zamiast wyświetlać pliki, podaje rozmiar i typ obrazu. Nadal nie zapewnia wyraźnej rozdzielczości, ale unika tworzenia plików wyjściowych.
scruss
1
@scruss Począwszy od wersji 0.34.0, pdfimages -listzawiera wyraźne x-ppii y-ppi, jak również wiele innych informacji.
Skippy le Grand Gourou
Rzeczywiście tak jest teraz, @SkippyleGrandGourou: około pięć lat po zadaniu pytania. Jednak pdfimages nadal nie stosuje tej rozdzielczości / rozmiaru do wyodrębnionych obrazów.
scruss
@scruss Właściwie wydaje się, że rozdzielczość podana przez pdfimagesmoże być całkiem zła (np. gdy obraz jest większy niż jego widoczny obszar, w pliku PDF wyprodukowanym przez scribus). (Niestety tak naprawdę nie mam teraz czasu na zgłoszenie błędu).
Skippy le Grand Gourou 16.10.16
4

Z jakiegoś powodu najnowszą wersją pdfimages, którą mogę zaktualizować w moim CentOS, jest wersja 3.04.

Nie mam więc opcji -list, jak stwierdzono w poprzednich odpowiedziach. Jednak obraz testowy utworzony z pdfimages na podstawie odpowiedzi slhck zawiera pożądaną odpowiedź!

identyfikacja -verbose test-0000.jpg | więcej

Image: test-0000.jpg  
Format: JPEG (Joint Photographic Experts Group JFIF format)  
Mime type: image/jpeg  
Class: DirectClass  
Geometry: 6600x5100+0+0  
Resolution: 600x600  
Print size: 11x8.5

Dlatego dpi jest wyraźnie pokazana w szóstym wierszu za pomocą opcji -verbose w poleceniu identyfikacji.

Tak więc odpowiedź slhck można zmodyfikować w następujący sposób.

pdfimages -j test.pdf test && dla pliku w $ (znajdź. -name "test * .jpg"); identyfikuj -verbose "$ file" | awk „NR == 6”; Gotowe

Z innej notatki próbowałem biec

identyfikacja -verbose test.pdf

Format: PDF (Portable Document Format)  
Mime type: application/pdf  
Class: DirectClass  
Geometry: 792x612+0+0  
Resolution: 72x72  
Print size: 11x8.5  

Wygląda na to, że Imagemagick zawsze przyjmuje rozdzielczość 72 dpi, więc wydrukowane tutaj informacje wydają się nieprawidłowe.

kykong
źródło
1

Plik PDF nie ma właściwej rozdzielczości, każdy obraz rastrowy (jeśli taki istnieje) będzie miał własną rozdzielczość. Nie znam prostego sposobu na wyodrębnienie pojedynczej liczby dla mediany / rozdzielczości modalnej osadzonych obiektów XObject.

RedGrittyBrick
źródło
Nawiasem mówiąc, nie jestem zainteresowany wydobywaniem danych obrazu z pdf, chcę tylko wiedzieć, jaka była rozdzielczość skanowania, a jeśli jest bardzo wysoka, niepotrzebnie chciałbym tego uniknąć w przyszłości.
hk_
@Dave: Właściwie miałem na myśli wyodrębnienie informacji o osadzonych obrazach, a nie wyodrębnienie obrazu. Ale odpowiedź slhck może rozwiązać twój problem.
RedGrittyBrick
1

To działało z plikiem PDF wygenerowanym z Kyocera MFP ... Prawdopodobnie jest to poprawne tylko dla obrazów całej strony, takich jak skany.

  1. Otwórz pdf w / Reader-
  2. Plik> Właściwości - karta Opis - Rozmiar strony. Mój przykład powiedział 8,5 x 11,0 cali.

  3. Otwórz pdf w edytorze tekstu (notatniku), poszukaj /widthi/height

  4. Weź wysokość i szerokość i podziel je przez wysokość i szerokość strony (w calach)

Przykład:

5100/8.5=600
6600/11.0=600

Mój plik PDF został zeskanowany w rozdzielczości 600 x 600.

Możesz pominąć pierwsze 2 kroki, jeśli znasz rozmiar dokumentu (zazwyczaj A4 to 8,27 x 11,69).

Jeff21050
źródło
0

Aby odpowiedzieć na drugi punkt, oprócz wzmianki @slhck o rozdzielczości drukarki, 300 dpi jest również typową minimalną zalecaną liczbą dla OCR z czcionkami o wielkości 10 + pt.

Co więcej, nowoczesny 15-calowy ekran laptopa 4K ma także tylko około 280Pi, więc jeśli chcesz wyświetlić cały A4 na ekranie (poziomo), nie ma sensu skanowania w rozdzielczości wyższej niż ~ 320 dpi, ponieważ każdy dokument wyższy niż ten będzie skalowane w dół. Oczywiście nie ma to znaczenia, jeśli planujesz powiększenie, wtedy możesz potrzebować wyższej rozdzielczości.

Aby odpowiedzieć na pozostałe dwa punkty, w dzisiejszych czasach przynajmniej możesz użyć Acrobat Pro do sprawdzenia DPI obrazu i rozdzielczości, a także możesz go edytować.

jiggunjer
źródło