如何将图像批量转换为PDF?


10

我想将图像(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之外的解决方案。

Answers:


8

一种解决方法是拆分图像生成和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上查看它的运行情况。


这很漂亮!谢谢!是否也可以删除非临时的pdf临时文件?
Rasmus 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.