Вопрос или проблема
Допустим, у вас есть 4 отсканированные страницы, созданные с помощью scanimage и обработанные в GIMP: каждая страница была повернута так, чтобы строки текста были горизонтальными, текст, просвечивающий на другой стороне, был удалён, и поля были удалены. Вы хотите без потерь создать один PDF-документ из 4 страниц. Вот что вы попробовали:
$ convert $(for i in $(seq 1 4); do echo page_$i.pnm; done | xargs echo) -compress Zip -quality 100 tmp_output_document.convert.pdf && pdftk tmp_output_document.convert.pdf update_info <(echo -e "InfoKey: Title\nInfoValue: Document title") output output_document.convert.pdf && rm -f tmp_output_document.convert.pdf
$ img2pdf $(for i in $(seq 1 4); do echo page_$i.pnm; done | xargs echo) --title "Document title" -o output_document.img2pdf.pdf --pillow-limit-break
$ diff <(pdfinfo output_document.img2pdf.pdf) <(pdfinfo output_document.convert.pdf)
2,4c2,4
< Producer: img2pdf 0.4.4
< CreationDate: …
< ModDate: …
---
> Producer: https://imagemagick.org
> CreationDate: …
> ModDate: …
6c6
< Metadata Stream: no
---
> Metadata Stream: yes
14c14
< Page size: 7204.5 x 10071 pts
---
> Page size: 9606 x 13428 pts
16,17c16,17
< File size: 201800756 bytes
< Optimized: yes
---
> File size: 254369508 bytes
> Optimized: no
(Выше, вы убрали временные метки для простоты.)
И img2pdf, и convert, по вашему мнению, создают файлы без потерь, не так ли?
Так почему же размеры отличаются в 254369508/201800756 ≈ 1,26 раза?
И почему размеры страниц так сильно различаются, и один файл «оптимизирован», а другой нет? Для безупречного хранения, какой метод лучше: img2pdf или convert+pdftk, и как его правильно использовать™?
Ответ или решение
Теория
При создании многостраничного PDF документа из серых PNM-сканкопий важно учитывать требования к качеству и размеру конечного файла. В данной задаче сравниваются два инструмента — convert
, часть пакета ImageMagick, и img2pdf
, специализированный инструмент для создания PDF — для создания без потерь многосайтового PDF-файла.
Convert
Convert
– это универсальный и многофункциональный инструмент, предлагающий ряд опций для работы с изображениями и их конвертации в различные форматы, включая PDF. В процессе создания PDF, convert
использует методы сжатия, такие как Zip, и позволяет задать качество изображения. Однако его возможности могут привести к усложнению процесса оптимизации и к большому размеру выходного файла.
img2pdf
Img2pdf
– это специализированный инструмент, который разрабатывался именно для конвертации изображений в PDF без потери качества. Он использует подход, при котором изображение встраивается в PDF как есть, без перекодировки, что гарантирует сохранение исходных свойств и качество изображения. Инструмент также может задавать метаданные, такие как заголовок документа, в отличие от convert
, который требует дополнительной обработки через pdftk
для вставки метаданных.
Пример
В вашем случае, использование обоих инструментов дало разные размеры выходных файлов и различные размеры страниц, что привело к вопросу о предпочтительности выбора между ними:
- Файл, созданный с помощью
convert
, оказался больше по размеру и не оптимизированным. img2pdf
произвел меньший по размеру и оптимизированный PDF-файл.
Это различие частично связано с тем, как каждый инструмент обрабатывает изображения и метаданные. Convert
включает метаданные в виде отдельного потока, и его подход к обработке изображений, вероятно, менее оптимизирован для конкретной задачи преобразования в PDF.
Кроме того, Page size тоже отличалась: img2pdf
встраивает изображения согласно их физическим размерностям, в то время как convert
мог масштабировать их в процессе, влияя на размер страницы и полезное разрешение.
Применение
Для без потерь создания многосайтового PDF из серых PNM-сканкопий можно рекомендовать img2pdf
из-за:
- Сохранения качества: Благодаря избеганию рекомпрессии изображений,
img2pdf
обеспечивает точное соответствие сканированных данных. - Оптимизации размера: Размеры файлов, созданные с помощью
img2pdf
, обычно меньше, это связано с отсутствием интерполяции и правильной встроенной компрессией, что важно для хранения и передачи данных. - Управления метаданными:
img2pdf
может напрямую управлять метаданными, что упрощает процесс создания окончательного PDF.
Как использовать img2pdf:
-
Установка: Убедитесь, что
img2pdf
установлен. Установка может быть произведена через pip:pip install img2pdf
. -
Конвертация: Используйте команду, подобную уже приведенной:
img2pdf $(for i in $(seq 1 4); do echo page_$i.pnm; done | xargs echo) --title "Document title" -o output_document.img2pdf.pdf --pillow-limit-break
Данная команда объединяет все названные изображения в один PDF-документ, добавляя заголовок.
-
Проверка: Убедитесь, что выходной файл соответствует вашим ожиданиям по качеству и размеру. Используйте утилиты, такие как
pdfinfo
, чтобы подтвердить наличие и корректность метаданных.
Заключение
Выбор между convert
и img2pdf
при обработке PNM-файлов сводится в основном к вашим требованиям по качеству и размеру конечного файла. Если вам необходим без потерь метод с меньшим размером итогового документа и встроенными метаданными, img2pdf
будет наилучшим выбором. Он предоставляет более оптимизированный результат без лишней переконверсии изображений, гарантируя что все сканы сохраняют свою оригинальную четкость и масштаб.