В прошлый раз, когда я использовал convertдля такой задачи, я явно указал размер места назначения с помощью изменения размера:
$ i=150; convert a.png b.png -compress jpeg -quality 70 \
-density ${i}x${i} -units PixelsPerInch \
-resize $((i*827/100))x$((i*1169/100)) \
-repage $((i*827/100))x$((i*1169/100)) multipage.pdf
Команда convertне всегда использует DPI в качестве единицы измерения плотности / формата страницы по умолчанию, поэтому мы явно указываем DPI с помощью этой -unitsопции (в противном случае вы можете получить разные результаты с разными комбинациями версий / форматов ввода). Новый размер (указанный через -resize) - это размер страницы DIN A4 в пикселях. Аргумент resize указывает максимальный размер страницы. Какое разрешение и качество выбрать точно, зависит от варианта использования - я выбрал 150 DPI и среднее качество, чтобы сэкономить место, хотя при печати на бумаге он выглядит не так уж плохо.
Обратите внимание, что convertпо умолчанию не изменяется соотношение сторон с помощью операции изменения размера:
Изменение размера подгонит изображение под требуемый размер. НЕ заполняет, запрошенный размер коробки.
( Руководство по ImageMagick )
В зависимости от версии ImageMagick и задействованных форматов ввода, возможно, можно пропустить этот -repageпараметр. Но иногда это требуется, и без этой опции заголовок PDF может содержать слишком маленькие размеры. В любом случае, -repageне должно быть больно.
В вычислениях используется целочисленная арифметика, поскольку это bashподдерживается только. С zshпомощью выражений можно упростить - т.е. заменить на $((i*8.27))x$((i*11.69)).
Lineart Images
Если файлы PNG представляют собой двухуровневые (черно-белые или линейные) изображения, тогда img2pdfинструмент дает превосходные результаты по сравнению с ImageMagick convert. Это означает, img2pdfчто быстрее и дает меньше PDF-файлов.
Пример:
$ img2pdf -o multipage.pdf a.png b.png
или же:
$ img2pdf --pagesize A4 -o multipage.pdf a.png b.png
-repage a4я получаюinvalid argument for option '-repage': a4