Как программно определить DPI изображений в PDF файле?

13

У меня есть несколько PDF-файлов, которые я хочу разделить на TIFF-файлы с помощью convert(для OCR через tesseract). Пока это работает отлично - за исключением того, что для автоматизации всего процесса мне нужно установить DPI для convertвывода. Прямо сейчас я использую такую ​​команду:

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

... который выводит файлы PDF с разрешением 300 DPI. Однако некоторые PDF-файлы имеют более низкий DPI (например, 150 DPI), что означает, что я не хочу выводить их при 300 DPI через convert- это создает чрезмерно большие файлы TIFF без какой-либо дополнительной информации.

Я знаю, что есть способы проверить DPI изображений в PDF-файле, открыв Adobe Acrobat и возиться с инструментами «предпечатной проверки». Однако есть ли способ определить с помощью командной строки DPI определенного файла PDF?

Джейсон
источник

Ответы:

9

Главный ответ

Поскольку меня интересует такая же работа (хотя и не обязательно для распознавания PDF-файлов, но для преобразования их в DjVu, а затем для распознавания), я обнаружил, что этот вопрос отсутствует, и ответы отсутствуют (поскольку мне нужно было угадать DPI изображения с количеством пикселей, а затем использовать размер в качестве выходных данных pdfinfoили других приемов - не говоря уже о том, что изображения в PDF могут иметь различную плотность и т. д.).

После долгих исследований я обнаружил, что вы можете использовать pdfimages(из пакета poppler-utils ), например, следующее:

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

Обратите внимание на x-ppiи y-ppiв списке выше. Он также перечисляет формат, в котором изображения хранятся в PDF, что круто (иногда это JBIG2, иногда JPEG2000 и т. Д.)

Примечание: файл, deptest.pdfиспользованный выше, доступен из pdfsizeoptрепозитория .

Реальное действие

После этого вы можете просто извлечь изображения pdfimagesсамостоятельно или использовать pdftoppm(также из poppler-utils) для отображения целых страниц во многих форматах, которые вам могут понравиться (например, TIFF, для сканирования с помощью tesseract).

Вы можете использовать что-то вроде следующего (при условии, что вы создали каталог с именем, imgsкуда вы положите свои изображения):

pdfimages -png Faraway-PRA.pdf imgs/prefix

Файлы будут созданы внутри каталога imgsс именами, начинающимися с prefix:

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

Затем вы можете выполнить любую операцию, которую сочтете нужной, с помощью инструментов, которые scantailorвам понравятся.

Более прямой ответ

Если вы просто хотите, чтобы OCR PDF-файл, вы можете использовать программу, которая хорошо поддерживается и уже упакованы, а именно ocrmypdf .

rbrito
источник
Обратите внимание, что x-ppi(разрешение x в DPI) и y-ppi(разрешение y в DPI) НЕ показаны в более старых версиях pdfimages, например, в Ubuntu 14.04. Однако то, что доступно в Ubuntu 18.04, включает эти значения. pdfimages -vна моем Ubuntu 18.04 машины шоу у меня есть версия 0.62.0, которая делает эти функции.
Габриэль Стейплс
@GabrielStaples, спасибо за указание на это. Я думал, что Ubuntu 14.04 уже был написан EOL, но у него «только» была стандартная поддержка, закончившаяся в июле 2019 года, согласно wiki.ubuntu.com/Releases
rbrito
4

Мне нужна была эта информация, и я нашел ее здесь:

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

Эта техника также использует ImageMagick:

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

Выходными данными являются размер изображения и dpi:

2480 x 3507 300 x 300
excyberlabber
источник
Я бы добавил новую строку в конец формата, на случай, если вы захотите сделать * .pdf для обработки всех PDF-файлов в каталоге. "% wx% h% xx% y \ n"
Hatoru Hansou
2

Я использую следующую команду:

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

и он возвращает:

Size: 380x380
мессия
источник
Спасибо - получим размер изображений в формате pdf (в вашем случае это 380х380, как квадрат). DPI отличается. На моем файле, на котором я только что выполнил эту команду, я получаю, Size: 595x842хотя DPI (проверка в Acrobat) составляет около 130
Джейсон