¿Cómo determinar mediante programación DPI de imágenes en un archivo PDF?

13

Tengo algunos archivos PDF que quiero dividir en archivos TIFF usando convert(para OCR a través de tesseract). Esto hasta ahora está funcionando muy bien, excepto que para automatizar todo el proceso, necesito configurar el DPI de la convertsalida. En este momento, estoy usando un comando como este:

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

... que genera los archivos PDF a 300 DPI. Sin embargo, algunos archivos PDF tienen un DPI más bajo (por ejemplo, 150 DPI), lo que significa que no quiero generarlos a 300 DPI a través de convertesto, esto crea archivos TIFF excesivamente grandes sin ninguna información adicional.

Sé que hay formas de verificar el DPI de las imágenes en un archivo PDF abriendo Adobe Acrobat y jugando con las herramientas de "verificación previa". Sin embargo, ¿hay alguna forma de determinar a través de la línea de comando el DPI de un archivo PDF en particular?

Jason
fuente

Respuestas:

9

Respuesta principal

Como estoy interesado en el mismo tipo de trabajo (aunque no necesariamente para OCR los archivos PDF, pero para convertirlos a DjVu y luego OCR), encontré esta pregunta y las respuestas que faltan (ya que necesitaba adivinar el DPI del imágenes con el número de píxeles y luego usar el tamaño como resultado pdfinfou otros trucos --- sin mencionar que las imágenes dentro de un PDF pueden tener diferentes densidades, etc.).

Después de mucha investigación más, descubrí que puede usar pdfimages(del paquete poppler-utils ) como lo siguiente:

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

Observe el x-ppiy y-ppien la lista anterior. También enumera el formato en el que se almacenan las imágenes en el PDF, lo cual es genial (a veces, es JBIG2, a veces JPEG2000, etc.)

Nota: El archivo deptest.pdfutilizado anteriormente está disponible en pdfsizeoptel repositorio de .

La verdadera acción

Después de eso, simplemente puede extraer las imágenes consigo pdfimagesmismo o usar pdftoppm(también desde poppler-utils) para renderizar páginas enteras en muchos formatos que le gusten (por ejemplo, tiff, para escanear con tesseract).

Puede usar algo como lo siguiente (suponiendo que haya creado un directorio llamado imgsdonde colocará sus imágenes):

pdfimages -png Faraway-PRA.pdf imgs/prefix

Los archivos se crearán dentro del directorio imgscon nombres que comienzan con prefix, como en:

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

Luego, puede realizar cualquier cirugía que considere adecuada con herramientas como scantailoro lo que quiera.

Respuesta más directa

Si solo desea OCR un archivo PDF, puede usar un programa que esté bien mantenido y que ya esté empaquetado, a saber, ocrmypdf .

rbrito
fuente
Tenga en cuenta que x-ppi(la resolución x en DPI) y y-ppi(la resolución y en DPI) NO se muestran en las versiones anteriores pdfimagesque vienen con Ubuntu 14.04, por ejemplo. Lo que está disponible en Ubuntu 18.04, sin embargo, incluye estos valores. pdfimages -ven mis Ubuntu 18.04 máquina espectáculos Tengo la versión 0.62.0, lo que hace que estas características.
Gabriel Staples, el
@GabrielStaples, gracias por señalarlo. Pensé que Ubuntu 14.04 ya estaba EOL'ed, pero "solo" tenía su Soporte Estándar terminado en julio de 2019 de acuerdo con wiki.ubuntu.com/Releases
rbrito
4

Necesitaba esta información y la encontré aquí:

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

Esta técnica también usa ImageMagick:

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

El resultado es el tamaño de la imagen y el dpi:

2480 x 3507 300 x 300
excyberlabber
fuente
Agregaría una nueva línea al final del formato, en caso de que desee hacer * .pdf para procesar todos los archivos PDF en el directorio. "% wx% h% xx% y \ n"
Hatoru Hansou
2

Yo uso el siguiente comando:

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

y vuelve:

Size: 380x380
Mahdi
fuente
Gracias, esto obtiene el tamaño de las imágenes pdf (en su caso, 380x380, ya que es un cuadrado). El DPI es diferente. En mi archivo en el que acabo de ejecutar este comando, obtengo Size: 595x842aunque el DPI (comprobación en Acrobat) es alrededor de 130
Jason