Как пакетно конвертировать изображение в PDF?
Я хочу конвертировать изображения (JPG, PNG и т. Д.) В PDF. Преобразование их непосредственно в PDF легко с:
convert in.jpg out.pdf
Однако мне нужны некоторые дополнительные параметры, такие как настройка размера выходной страницы, полей и поворота между альбомным и портретным форматами. После некоторых проб и ошибок я придумал:
convert -rotate "90>" -page A4+0+0 -gravity center in.jpg out.pdf
При этом изображение центрируется на странице формата А4 и автоматически поворачивается между альбомным и портретным режимами, однако оно работает только с небольшими изображениями размером менее 595x842. Изображение большего размера разрывается, так как 595x842 представляется разрешением в пикселях, назначенным странице A4. Чтение вокруг в сети, -density
Это может быть потенциальное решение для увеличения числа пикселей на странице формата А4, но я не могу заставить его работать.
Конечно, приветствуются и решения вне Imagemagick.
2 ответа
Одним из обходных путей является разделение генерации изображения и преобразования PDF. Сначала конвертируйте изображения через convert
до A4@300dpi (т.е. 3508x2479), затем используйте sam2p, чтобы преобразовать их в PDF, а затем используйте sam2p_pdf_scale, чтобы преобразовать их в A4.
convert -rotate "90>" -scale 3508x2479 -border 64x64 -bordercolor white in.png out.png
sam2p out.png out.pdf
sam2p_pdf_scale 595 842 out.pdf
Изменить: более полный сценарий:
#!/bin/sh
A4_WIDTH=2479
A4_HEIGHT=3508
H_MARGIN=64
V_MARGIN=64
WIDTH=$((${A4_WIDTH} - ${H_MARGIN} * 2))
HEIGHT=$((${A4_HEIGHT} - ${V_MARGIN} * 2))
for i in "$@"; do
TMP="/tmp/$(uuidgen).png"
echo "$i"
convert \
-rotate "90>" \
-scale "${WIDTH}x${HEIGHT}" \
-border "${H_MARGIN}x${V_MARGIN}" -bordercolor white \
-gravity center \
-extent "${A4_WIDTH}x${A4_HEIGHT}" \
-gravity center \
-font helvetica -pointsize 80 \
-fill white -draw \
"push graphic-context
translate $((${A4_WIDTH}/2 - 160)), 0
rotate 90
text -2,-2 '$i'
text -2,2 '$i'
text 2,-2 '$i'
text 2,2 '$i'
pop graphic-context
" \
-fill black -draw \
"push graphic-context
translate $((${A4_WIDTH}/2 - 160)), 0
rotate 90
text 0,0 '$i'
pop graphic-context
" \
"$i" "$TMP"
sam2p "$TMP" "${i}.pdf"
sam2p_pdf_scale 595 842 "${i}.pdf"
done
# EOF #
Немного чище, чем другой ответ:
ls *.jpg | sed -r 's/(.*)\.(\w{3,4})/\1.\2 \1.pdf/' | xargs -n2 sam2p 2>&1 | grep OutputFile | perl -pe 's/.*: //' | xargs pdfjoin --outfile out.pdf
Смотрите это в действии на http://convertjpgpdf.net/.