
У меня в каталоге около 190 файлов изображений (png и jpg). Для получения дополнительной информации, каждое изображение имеет размер 2500 x 3072 пикселей и вес около 500 КБ.
Я использую команду convert
из ImageMagik, чтобы преобразовать и объединить их в PDF-файл:
convert * my.pdf
Создание PDF-файла размером 80 МБ занимает около 10 ГБ (в пиковом режиме) и 4 часа.
Сначала мне не удалось запустить его, потому что у меня не было достаточно свободного места на моем /tmp
(на самом деле в моем /
разделе). Затем мне пришлось найти внешний жесткий диск с большим количеством свободного места и установить переменную окружения, TMPDIR
чтобы она указывала на него, и тогда мне это удалось.
Интересно, есть ли какое-то другое программное обеспечение для конвертации и объединения изображений в файл pdf, кроме convert
, чтобы исключить необходимость во внешнем жестком диске? Или типично, что такое преобразование и объединение требуют аналогичного количества временного пространства на диске?
Более подробная информация о файлах изображений, например,
$ exiftool 1.jpg
ExifTool Version Number : 8.60
File Name : 1.jpg
Directory : .
File Size : 453 kB
File Modification Date/Time : 2014:11:15 13:41:55-05:00
File Permissions : rwxrwx---
File Type : JPEG
MIME Type : image/jpeg
JFIF Version : 1.01
Resolution Unit : None
X Resolution : 1
Y Resolution : 1
Image Width : 2500
Image Height : 3072
Encoding Process : Baseline DCT, Huffman coding
Bits Per Sample : 8
Color Components : 3
Y Cb Cr Sub Sampling : YCbCr4:2:0 (2 2)
Image Size : 2500x3072
$ exiftool 2.png
ExifTool Version Number : 8.60
File Name : 2.png
Directory : .
File Size : 310 kB
File Modification Date/Time : 2014:11:15 13:50:58-05:00
File Permissions : rwxrwx---
File Type : PNG
MIME Type : image/png
Image Width : 2500
Image Height : 3072
Bit Depth : 8
Color Type : Grayscale
Compression : Deflate/Inflate
Filter : Adaptive
Interlace : Noninterlaced
Pixels Per Unit X : 11929
Pixels Per Unit Y : 11929
Pixel Units : Meters
Image Size : 2500x3072
решение1
Может быть, это и маловероятно, но я использую pdflatex
. Я создаю файл (со скриптом или чем-то еще) в стиле:
\documentclass{report}
\usepackage{graphicx}
\begin{document}
\includegraphics[width=0.95\textwidth]{img000}\par
\includegraphics[width=0.95\textwidth]{img001}\par
[...]
\includegraphics[width=0.95\textwidth]{img200}\par
\end{document}
А затем запустите его с помощью pdflatex file
. Составление происходит быстро (и вы можете легко --- если вы знаете LaTeX --- изменить форму и положение изображений, добавить подписи и т. д.)
Проблема в том, что файл обычно очень большой; я тестировал с 200 jpg размером 500K+ --- запуск занял около 7 секунд на моем i5/16G RAM и выдал PDF размером 800Mbyte. Я пытаюсь уменьшить его размер с помощью
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=lowres.pdf file.pdf
...и он работает уже 8 минут, но не использует много оперативной памяти. Я не могу прокомментировать сжатие, потому что gs
он умнее меня и обнаружил, что я использовал одно и то же изображение 200 раз, поэтому сжал его до 50k PDF... что явно нереально.
решение2
К сожалениюconvert
изменяет изображение до этого, поэтому для минимальной потери качества оригинала jpg
вам нужно использовать img2pdf
, я использую эти команды:
Более короткое решение в одну строку, также использующее только img2pdf
функции
Сделать PDF-файл
img2pdf *.jp* --output combined.pdf
OCR выходного PDF-файла
ocrmypdf combined.pdf combined_ocr.pdf
Это были исходные команды с дополнительными командами и инструментами:
1) Это позволит создать pdf
файл из каждого jpg
изображения без потери разрешения или качества:
ls -1 ./*jpg | xargs -L1 -I {} img2pdf {} -o {}.pdf
2) Это для объединения pdf
страниц в одну:
pdftk *.pdf cat output combined.pdf
3) И последнее, я добавляю слой текста с распознанным текстом, который не меняет качество сканирования в PDF-файлах, чтобы их можно было искать:
pypdfocr combined.pdf