Wie konvertiere ich ein Bild stapelweise in ein PDF?

10

Ich möchte Bilder (jpg, png usw.) stapelweise in PDF konvertieren. Das direkte Konvertieren in PDF ist einfach mit:

convert in.jpg out.pdf

Ich benötige jedoch einige weitere Optionen, z. B. das Festlegen der Größe der Ausgabeseite, der Ränder und der Drehung zwischen Quer- und Hochformat. Nach einigem Ausprobieren habe ich mir Folgendes ausgedacht:

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

Dadurch wird das Bild auf einer A4-Seite zentriert und automatisch zwischen Quer- und Hochformat gewechselt. Es funktioniert jedoch nur mit kleinen Bildern unter 595 x 842. Größere Bilder brechen ab, da 595 x 842 die Auflösung in Pixel zu sein scheint, die einer A4-Seite zugewiesen ist. Wenn Sie im Internet herumlesen, ist die -densityOption möglicherweise eine mögliche Lösung, um die Pixelanzahl auf einer A4-Seite zu erhöhen, aber ich konnte sie nicht zum Laufen bringen.

Lösungen außerhalb von Imagemagick sind natürlich ebenfalls willkommen.

Grumbel
quelle

Antworten:

8

Eine Problemumgehung besteht darin, die Bilderzeugung und die PDF-Konvertierung aufzuteilen. Konvertieren Sie die Bilder zuerst über convertA4 @ 300dpi (dh 3508 x 2479), konvertieren Sie sie dann mit sam2p in PDF und konvertieren Sie sie dann mit sam2p_pdf_scale in 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

Bearbeiten: Ein vollständigeres Skript:

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

Ein bisschen sauberer als die andere Antwort :

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

Sehen Sie es in Aktion unter http://convertjpgpdf.net .

jobjol
quelle
Das funktioniert wunderbar! Vielen Dank! Wäre es möglich, auch die "temporären", nicht verketteten PDFs zu entfernen?
Rasmus