我想批量将图像(jpg、png 等)转换为 PDF。使用以下方法可以轻松将它们直接转换为 PDF:
convert in.jpg out.pdf
但是我需要更多选项,例如设置输出页面大小、边距以及横向和纵向格式之间的旋转。经过反复尝试,我得出了以下结论:
convert -rotate "90>" -page A4+0+0 -gravity center in.jpg out.pdf
这会将图像置于 A4 页面的中心,并自动在横向和纵向之间旋转,但是它只适用于 595x842 以下的小图像。较大的图像会失效,因为 595x842 似乎是分配给 A4 页面的像素分辨率。在网上读到,-density
选项可能是增加 A4 页面像素数的潜在解决方案,但我无法让它工作。
当然也欢迎 Imagemagick 之外的解决方案。
答案1
一种解决方法是将图像生成和 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 #
答案2
比其他答案:
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。