Como determinar programaticamente o DPI das imagens no arquivo PDF?

8

Eu tenho alguns arquivos PDF que quero dividir em arquivos TIFF usando convert (para o OCR via tesseract ). Isso até agora está funcionando muito bem - exceto que, para automatizar todo o processo, preciso definir o DPI da saída convert . No momento, estou usando um comando assim:

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

... que gera os arquivos PDF em 300 DPI. No entanto, alguns arquivos PDF têm menor DPI (por exemplo, 150 DPI), o que significa que não quero gerá-los em 300 DPI via convert - isso cria arquivos TIFF excessivamente grandes sem nenhuma informação adicional.

Sei que existem maneiras de verificar o DPI de imagens em um arquivo PDF abrindo o Adobe Acrobat e mexendo nas ferramentas de "comprovação". No entanto, existe uma maneira de determinar, por meio da linha de comando, o DPI de um determinado arquivo PDF?

    
por Jason 23.04.2016 / 05:33

3 respostas

2

Eu uso o seguinte comando:

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

e retorna:

Size: 380x380
    
por Mahdi 23.04.2016 / 06:31
2

Eu precisava desta informação e encontrei-a aqui:

link

Esta técnica também usa o ImageMagick:

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

A saída é o tamanho da imagem e o dpi:

2480 x 3507 300 x 300
    
por excyberlabber 28.07.2017 / 08:04
0

Resposta principal

Desde que eu estou interessado no mesmo tipo de trabalho (embora não necessariamente para OCR os arquivos PDF, mas para convertê-los para DjVu e então OCR-los), eu encontrei esta questão e as respostas falta (desde que eu precisava adivinhar o DPI das imagens com o número de pixels e, em seguida, usar o tamanho como saída por pdfinfo ou outros truques --- sem mencionar que as imagens dentro de um PDF pode ter diferentes densidades, etc.).

Depois de muitas pesquisas, descobri que você pode usar pdfimages (do pacote poppler-utils ) da seguinte forma:

$ 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 o x-ppi e y-ppi na listagem acima. Ele também lista o formato no qual as imagens são armazenadas no PDF, o que é legal (às vezes, é JBIG2, às vezes JPEG2000 etc.)

A ação real

Depois disso, você pode simplesmente extrair as imagens com pdfimages ou usar pdftoppm (também de poppler-utils ) para renderizar páginas inteiras em vários formatos que você possa gostar (por exemplo, tiff, para digitalizar com tesseract ).

Você pode usar algo como o seguinte (supondo que você tenha criado um diretório chamado imgs onde você colocará suas imagens):

pdfimages -png Faraway-PRA.pdf imgs/prefix

Os arquivos serão criados dentro do diretório imgs com nomes começando com prefix , como em:

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

Você pode, então, realizar qualquer cirurgia que considere adequada com ferramentas como scantailor ou o que quiser.

Resposta mais direta

Se você quiser apenas OCR de um arquivo PDF, você pode usar um programa que é bem mantido e já embalado, ou seja, ocrmypdf .

    
por rbrito 25.04.2018 / 23:27