Bagaimana cara mengonversi gambar secara batch ke PDF?

10

Saya ingin batch mengonversi gambar (jpg, png, dll.) Ke PDF. Mengubahnya langsung ke PDF mudah dengan:

convert in.jpg out.pdf

Namun saya memerlukan beberapa opsi lagi, seperti mengatur ukuran halaman output, margin dan rotasi antara format landscape dan portrait. Setelah beberapa percobaan dan kesalahan saya datang dengan:

convert -rotate "90>" -page A4+0+0  -gravity center in.jpg  out.pdf

Ini memusatkan gambar pada halaman A4 dan secara otomatis berputar antara lansekap dan potret, namun hanya berfungsi dengan gambar kecil di bawah 595x842. Gambar yang lebih besar pecah, karena 595x842 tampaknya merupakan resolusi dalam piksel yang ditetapkan untuk halaman A4. Membaca di internet, -densityopsi mungkin merupakan solusi potensial untuk meningkatkan jumlah piksel pada halaman A4, tapi saya tidak bisa membuatnya bekerja.

Solusi di luar Imagemagick tentu saja diterima juga.

Grumbel
sumber

Jawaban:

8

Salah satu solusinya adalah dengan membagi generasi gambar dan konversi PDF. Pertama-tama konversikan gambar melalui convertke A4 @ 300dpi (mis. 3508x2479), kemudian gunakan sam2p untuk mengubahnya menjadi PDF dan kemudian gunakan sam2p_pdf_scale untuk mengubahnya menjadi 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

Sunting: Skrip yang lebih lengkap:

#!/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 #
Grumbel
sumber
2

Sedikit lebih bersih daripada jawaban lainnya :

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

Lihat beraksi di http://convertjpgpdf.net .

jobjol
sumber
Ini bekerja dengan indah! Terima kasih! Apakah mungkin juga untuk menghapus pdf "sementara" yang tidak disatukan?
Rasmus