Comment déterminer par programme le DPI des images dans un fichier PDF?

13

J'ai des fichiers PDF que je veux diviser en fichiers TIFF en utilisant convert(pour l'OCR via tesseract). Jusqu'à présent, cela fonctionne très bien - sauf que pour automatiser l'ensemble du processus, je dois définir le DPI de la convertsortie. En ce moment, j'utilise une commande comme celle-ci:

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

... qui génère les fichiers PDF à 300 DPI. Cependant, certains fichiers PDF ont un DPI inférieur (par exemple 150 DPI), ce qui signifie que je ne veux pas les produire à 300 DPI via convert- cela crée des fichiers TIFF trop volumineux sans aucune information supplémentaire.

Je sais qu'il existe des moyens de vérifier le DPI des images dans un fichier PDF en ouvrant Adobe Acrobat et en jouant avec les outils de "contrôle en amont". Cependant, existe-t-il un moyen de déterminer via la ligne de commande le DPI d'un fichier PDF particulier?

Jason
la source

Réponses:

9

Réponse principale

Depuis que je suis intéressé par le même genre de travail (mais pas nécessairement OCR les fichiers PDF, mais pour les convertir en DjVu et puis OCR eux), je trouve cette question et les réponses manquent (puisque je devais deviner le DPI du images avec le nombre de pixels, puis utilisez la taille comme sortie par pdfinfoou d'autres astuces --- sans oublier que les images à l'intérieur d'un PDF peuvent avoir des densités différentes, etc.).

Après beaucoup de recherches, j'ai trouvé que vous pouvez utiliser pdfimages(à partir du package poppler-utils ) comme suit:

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

Remarquez le x-ppiet y-ppisur la liste ci-dessus. Il répertorie également le format dans lequel les images sont stockées dans le PDF, ce qui est cool (parfois, c'est JBIG2, parfois JPEG2000 etc.)

Remarque: Le fichier deptest.pdfutilisé ci-dessus est disponible à partir pdfsizeoptdu référentiel de .

La vraie action

Après cela, vous pouvez simplement extraire les images avec pdfimageslui-même ou utiliser pdftoppm(également à partir de poppler-utils) pour rendre des pages entières dans de nombreux formats que vous aimerez (par exemple, tiff, pour numériser avec tesseract).

Vous pouvez utiliser quelque chose comme ce qui suit (en supposant que vous avez créé un répertoire nommé imgsoù vous placerez vos images):

pdfimages -png Faraway-PRA.pdf imgs/prefix

Les fichiers seront créés dans le répertoire imgsavec des noms commençant par prefix, comme dans:

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

Vous pouvez alors effectuer toute opération que vous jugez appropriée avec des outils comme scantailorou ce que vous voulez.

Réponse plus directe

Si vous souhaitez simplement OCR un fichier PDF, vous pouvez utiliser un programme qui est bien entretenu et déjà packagé, à savoir ocrmypdf .

rbrito
la source
Notez que x-ppi(résolution x en DPI) et y-ppi(résolution y en DPI) ne sont PAS affichées sur les anciennes versions pdfimagesfournies avec Ubuntu 14.04, par exemple. Ce qui est disponible sur Ubuntu 18.04, cependant, inclut ces valeurs. pdfimages -vsur ma machine Ubuntu 18.04 montre que j'ai la version 0.62.0, qui n'ont ces caractéristiques.
Gabriel Staples
@GabrielStaples, merci de l'avoir signalé. Je pensais qu'Ubuntu 14.04 était déjà en fin de vie, mais "seulement" son support standard avait pris fin en juillet 2019 selon wiki.ubuntu.com/Releases
rbrito
4

J'avais besoin de ces informations et je les ai trouvées ici:

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

Cette technique utilise également ImageMagick:

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

La sortie est la taille de l'image et le dpi:

2480 x 3507 300 x 300
excyberlabber
la source
J'ajouterais une nouvelle ligne à la fin du format, au cas où vous voudriez faire * .pdf pour traiter tous les pdfs dans le répertoire. "% wx% h% xx% y \ n"
Hatoru Hansou
2

J'utilise la commande suivante:

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

et il retourne:

Size: 380x380
Mahdi
la source
Merci - cela obtient la taille des images pdf (dans votre cas, 380x380 car c'est un carré). Le DPI est différent. Sur mon fichier sur lequel je viens d'exécuter cette commande, je reçois Size: 595x842bien que le DPI (vérification dans Acrobat) soit d'environ 130
Jason