web-dev-qa-db-fra.com

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

J'ai quelques fichiers PDF que je souhaite diviser en fichiers TIFF à l'aide de convert(afin de pouvoir effectuer une ROC via tesseractname__). Jusqu'ici, cela fonctionne très bien - sauf que pour automatiser l'ensemble du processus, je dois définir le DPI de la sortie convertname__. En ce moment, j'utilise une commande comme celle-ci:

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

... qui sort les fichiers PDF à 300 DPI. Cependant, certains PDF fichiers ont plus faible DPI (par exemple, 150 DPI), ce qui signifie que je ne souhaite pas les imprimer à 300 DPI via convert- cela crée des fichiers TIFF excessivement volumineux sans toute information supplémentaire.

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

11
Jason

Réponse principale

Depuis que je suis intéressé par le même type de travail (mais pas nécessairement pour OCR les fichiers PDF, mais pour les convertir en DjV et alors les OCR), j’ai trouvé cette question et les réponses manquantes (car j’avais besoin de deviner le DPI des images avec le nombre de pixels, puis d’utiliser la taille en sortie de pdfinfo ou 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 (du paquet 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%

Notez les x-ppi et y-ppi dans la liste ci-dessus. Il indique également le format dans lequel les images sont stockées dans le fichier PDF, ce qui est pratique (parfois, il s’agit de JBIG2, parfois de JPEG2000, etc.)

Remarque: le fichier deptest.pdf utilisé ci-dessus est disponible à partir du référentiel de pdfsizeopt .

La vraie action

Après cela, vous pouvez simplement extraire les images avec pdfimages lui-même ou utiliser pdftoppm (également à partir de poppler-utils) pour restituer des pages entières dans de nombreux formats de votre choix (par exemple, tiff, pour la numérisation avec tesseract).

Vous pouvez utiliser quelque chose comme ceci (en supposant que vous ayez créé un répertoire nommé imgs où vous placerez vos images):

pdfimages -png Faraway-PRA.pdf imgs/prefix

Les fichiers seront créés dans le répertoire imgs avec 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 chirurgicale que vous jugerez appropriée avec des outils tels que scantailor ou ce que vous voudrez.

Réponse plus directe

Si vous souhaitez simplement faire de la ROC sur un fichier PDF, vous pouvez utiliser un programme bien géré et déjà fourni, à savoir ocrmypdf .

5
rbrito

J'avais besoin de cette information et je l'ai juste trouvée ici:

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

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
4
excyberlabber

J'utilise la commande suivante:

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

et ça retourne:

Size: 380x380
2
Mahdi