Wie kann die DPI von Bildern in einer PDF-Datei programmgesteuert ermittelt werden?

13

Ich habe einige PDF-Dateien, die ich mithilfe von TIFF-Dateien aufteilen möchte convert(um OCR über tesseract). Dies funktioniert bisher hervorragend - außer dass ich zur Automatisierung des gesamten Prozesses die DPI der convertAusgabe einstellen muss . Im Moment verwende ich einen Befehl wie diesen:

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

... der die PDF-Dateien mit 300 DPI ausgibt. Einige PDF-Dateien haben jedoch eine niedrigere DPI (z. B. 150 DPI), was bedeutet, dass ich sie nicht mit 300 DPI über ausgeben möchte. Dadurch werden convertübermäßig große TIFF-Dateien ohne zusätzliche Informationen erstellt.

Ich weiß, dass es Möglichkeiten gibt, die DPI von Bildern in einer PDF-Datei zu überprüfen, indem Sie Adobe Acrobat öffnen und in den "Preflight" -Tools herumspielen. Gibt es jedoch eine Möglichkeit, über die Befehlszeile die DPI einer bestimmten PDF-Datei zu bestimmen?

Jason
quelle

Antworten:

9

Hauptantwort

Da ich an der gleichen Art von Arbeit interessiert bin (obwohl nicht unbedingt, um die PDF-Dateien zu OCR, sondern um sie in DjVu und dann in OCR zu konvertieren ), fand ich diese Frage und die fehlenden Antworten (da ich die DPI der erraten musste Bilder mit der Anzahl der Pixel und verwenden Sie dann die Größe als Ausgabe durch pdfinfooder andere Tricks - ganz zu schweigen davon, dass die Bilder in einem PDF unterschiedliche Dichten haben können usw.).

Nach vielen weiteren Recherchen stellte ich fest, dass Sie pdfimages(aus Paket- Poppler-Utils ) wie folgt verwenden können:

$ 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%

Beachten Sie das x-ppiund y-ppiin der obigen Auflistung. Außerdem wird das Format aufgelistet, in dem die Bilder in der PDF-Datei gespeichert sind. Dies ist cool (manchmal ist es JBIG2, manchmal JPEG2000 usw.).

Hinweis: Die Datei deptest.pdfverwendet oben ist verfügbar von pdfsizeopt‚s - Repository .

Die wahre Aktion

Danach können Sie die Bilder einfach mit sich pdfimagesselbst extrahieren oder pdftoppm(auch aus poppler-utils) verwenden, um ganze Seiten in vielen Formaten zu rendern, die Sie mögen (z. B. tiff, zum Scannen mit tesseract).

Sie können Folgendes verwenden (vorausgesetzt, Sie haben ein Verzeichnis mit dem Namen erstellt, imgsin dem Sie Ihre Bilder ablegen):

pdfimages -png Faraway-PRA.pdf imgs/prefix

Die Dateien werden im Verzeichnis imgsmit Namen erstellt, die mit beginnen prefix, wie in:

$ 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
(...)

Sie können dann jede Operation durchführen, die Sie für geeignet halten, mit Werkzeugen wie scantailoroder was auch immer Sie möchten.

Direktere Antwort

Wenn Sie nur eine PDF-Datei OCR- fähig machen möchten, können Sie ein gut gepflegtes und bereits gepacktes Programm verwenden, nämlich ocrmypdf .

rbrito
quelle
Beachten Sie, dass x-ppi(x Auflösung in DPI) und y-ppi(y Auflösung in DPI) NICHT in älteren Versionen angezeigt werden, pdfimagesdie beispielsweise mit Ubuntu 14.04 geliefert werden. Was unter Ubuntu 18.04 verfügbar ist, enthält diese Werte jedoch. pdfimages -vauf meinem Ubuntu 18.04 Maschine zeigt habe ich Version 0.62.0, die macht diese Funktionen haben.
Gabriel Staples
@ GabrielStaples, danke, dass du darauf hingewiesen hast. Ich dachte, dass Ubuntu 14.04 bereits EOL'ed war, aber es "nur" hatte seinen Standard-Support Ende Juli 2019 laut wiki.ubuntu.com/Releases
rbrito
4

Ich brauchte diese Informationen und fand sie gerade hier:

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

Diese Technik verwendet auch ImageMagick:

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

Die Ausgabe entspricht der Größe des Bildes und der Auflösung:

2480 x 3507 300 x 300
Excyberlabber
quelle
Ich würde eine neue Zeile am Ende des Formats hinzufügen, falls Sie * .pdf ausführen möchten, um alle PDFs im Verzeichnis zu verarbeiten. "% wx% h% xx% y \ n"
Hatoru Hansou
2

Ich benutze den folgenden Befehl:

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

und es kehrt zurück:

Size: 380x380
Mahdi
quelle
Danke - dies ergibt die Größe der PDF-Bilder (in Ihrem Fall 380x380, da es sich um ein Quadrat handelt). Die DPI ist anders. Auf meiner Datei, auf der ich gerade diesen Befehl ausgeführt habe, erhalte ich, Size: 595x842obwohl die DPI (Einchecken in Acrobat) ungefähr 130 ist
Jason