Jak programowo określić DPI obrazów w pliku PDF?

13

Mam kilka plików PDF, które chcę podzielić na pliki TIFF za pomocą convert(w celu OCR przez tesseract). Do tej pory działa świetnie - poza tym, że aby zautomatyzować cały proces, muszę ustawić DPI convertwyjścia. W tej chwili używam następującego polecenia:

convert -density 300 myFile.pdf -depth 8 -background white output-%04d.tiff

... który generuje pliki PDF przy 300 DPI. Jednak niektóre pliki PDF mają niższe DPI (np. 150 DPI), co oznacza, że ​​nie chcę ich wysyłać przy 300 DPI przez convert- tworzy to zbyt duże pliki TIFF bez żadnych dodatkowych informacji.

Wiem, że istnieją sposoby na sprawdzenie DPI obrazów w pliku PDF, otwierając Adobe Acrobat i grzebiąc w narzędziach „inspekcji wstępnej”. Czy istnieje jednak sposób określenia za pomocą wiersza polecenia DPI określonego pliku PDF?

Jason
źródło

Odpowiedzi:

9

Główna odpowiedź

Ponieważ interesuje mnie ten sam rodzaj pracy (choć niekoniecznie OCR plików PDF, ale ich konwersja do DjVu, a następnie OCR), znalazłem to pytanie i brak odpowiedzi (ponieważ musiałem odgadnąć DPI obrazy z liczbą pikseli, a następnie użyj rozmiaru jako danych wyjściowych pdfinfolub innych sztuczek --- nie wspominając, że obrazy w pliku PDF mogą mieć różną gęstość itp.).

Po wielu badaniach więcej, odkryłem, że możesz używać pdfimages(z pakietu poppler-utils ) w następujący sposób:

$ pdfimages -list deptest.pdf
page   num  type   width height color comp bpc  enc interp  object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
   1     0 image     100   100  gray    1   1  image  no         9  0    53    53  169B  14%
   2     1 image     100   100  gray    1   1  ccitt  no   [inline]      53    53  698B  56%

Zauważ, że x-ppii y-ppiu wystawianie powyżej. Podaje także format, w jakim obrazy są przechowywane w pliku PDF, co jest fajne (czasami jest to JBIG2, czasem JPEG2000 itp.)

Uwaga: Plik deptest.pdfużyty powyżej jest dostępny z pdfsizeoptrepozytorium .

Prawdziwa akcja

Następnie możesz po prostu wyodrębnić obrazy pdfimagessamemu lub użyć pdftoppm(również z poppler-utils) do renderowania całych stron w wielu formatach, które mogą ci się spodobać (np. Tiff, do skanowania tesseract).

Możesz użyć czegoś takiego: (zakładając, że utworzyłeś katalog o nazwie, w imgsktórej umieścisz swoje obrazy):

pdfimages -png Faraway-PRA.pdf imgs/prefix

Pliki zostaną utworzone w katalogu imgso nazwach rozpoczynających się od prefix, jak w:

$ ls 
prefix-000.png  prefix-047.png  prefix-094.png  prefix-141.png
prefix-001.png  prefix-048.png  prefix-095.png  prefix-142.png
prefix-002.png  prefix-049.png  prefix-096.png  prefix-143.png
prefix-003.png  prefix-050.png  prefix-097.png  prefix-144.png
(...)

Następnie możesz wykonać dowolną operację, którą uznasz za odpowiednią, za pomocą narzędzi takich jak scantailorlub cokolwiek innego.

Bardziej bezpośrednia odpowiedź

Jeśli chcesz tylko OCR pliku PDF, możesz użyć programu, który jest dobrze utrzymany i już spakowany, a mianowicie ocrmypdf .

rbrito
źródło
Zauważ, że x-ppi(rozdzielczość xw DPI) i y-ppi(rozdzielczość yw DPI) NIE są pokazywane w starszych wersjach pdfimages, na przykład z Ubuntu 14.04. Jednak to, co jest dostępne w Ubuntu 18.04, zawiera te wartości. pdfimages -vna moim Ubuntu 18.04 pokazy maszyn mam wersję 0.62.0, który robi posiadają te cechy.
Gabriel Staples,
@GabrielStaples, dzięki za zwrócenie na to uwagi. Myślałem, że Ubuntu 14.04 było już EOL'ed, ale „tylko” jego Standard Support został zakończony w lipcu 2019 r. Zgodnie z wiki.ubuntu.com/Releases
rbrito
4

Potrzebowałem tych informacji i znalazłem je tutaj:

http://www.wizards-toolkit.org/discourse-server/viewtopic.php?t=16110

Ta technika wykorzystuje również ImageMagick:

identify -format "%w x %h %x x %y" DAT_1.tif

Dane wyjściowe to rozmiar obrazu i dpi:

2480 x 3507 300 x 300
excyberlabber
źródło
Dodałbym nową linię na końcu formatu, na wypadek gdybyś chciał zrobić plik * .pdf, aby przetworzyć wszystkie pliki pdf w katalogu. „% wx% h% xx% y \ n”
Hatoru Hansou
2

Używam następującego polecenia:

convert MyPDF.pdf -print "Size: %wx%h\n" /dev/null

i zwraca:

Size: 380x380
Mahdi
źródło
Dzięki - uzyskuje rozmiar obrazów pdf (w twoim przypadku 380x380, ponieważ jest to kwadrat). DPI jest inny. Z mojego pliku, na którym właśnie uruchomiłem to polecenie, otrzymuję Size: 595x842chociaż DPI (sprawdzanie w Acrobat) wynosi około 130
Jason