Востаннє, коли я використовував 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 у пікселях. Аргумент зміни розміру визначає максимальний розмір сторінки. Яку роздільну здатність та якість вибрати саме залежно від випадку використання - я вибрав 150 DPI та середню якість, щоб заощадити місце, хоча він не надто погано виглядає при друкуванні на папері.
Зауважте, що convertза замовчуванням не змінюється співвідношення сторін під час операції зміни розміру:
Змінити розмір буде відповідати зображенню до потрібного розміру. Він НЕ заповнює, потрібний розмір поля.
( Посібник із ImageMagick )
Залежно від версії ImageMagick і відповідних форматів введення, можливо, буде пропустити цю -repageопцію. Але іноді це потрібно і без цієї опції заголовок PDF може містити занадто малі розміри. У будь-якому випадку, -repageне слід шкодити.
Для обчислень використовується ціла арифметика, оскільки це bashлише підтримує. За zshдопомогою виразів можна спростити - тобто замінити на $((i*8.27))x$((i*11.69)).
Lineart Зображення
Якщо файли PNG мають дворівневі (чорно-білі ака-lineart) зображення, то 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