Як програмно визначити 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

Основна відповідь

Оскільки мене цікавить такий самий вид роботи (хоча і не обов'язково OCR PDF-файли, а конвертувати їх у DjVu, а потім OCR), я знайшов це питання та відповіді бракує (оскільки мені потрібно було здогадатися про 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 .


Зауважте, що 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'ed, але "лише" його стандартна підтримка закінчилася липня 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

Я б додав новий рядок до кінця формату, якщо ви хочете зробити * .pdf для обробки всіх pdfs у каталозі. "% wx% h% xx% y \ n"
Hatoru Hansou

2

Я використовую таку команду:

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

і він повертається:

Size: 380x380

Спасибі - це отримує розмір зображень у форматі pdf (у вашому випадку - 380x380, оскільки це квадрат). Ідеальний показник DPI. У моєму файлі, що я щойно виконував цю команду, я розумію, Size: 595x842що DPI (перевірка в Acrobat) становить близько 130
Джейсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.