Come convertire in batch un'immagine in un PDF?


10

Voglio convertire in batch le immagini (jpg, png, ecc.) In PDF. Convertirli direttamente in PDF è facile con:

convert in.jpg out.pdf

Tuttavia ho bisogno di alcune altre opzioni, come l'impostazione delle dimensioni della pagina di output, i margini e la rotazione tra formato orizzontale e verticale. Dopo alcuni tentativi ed errori ho escogitato:

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

Questo centra l'immagine su una pagina A4 e ruota automaticamente tra orizzontale e verticale, tuttavia funziona solo con immagini di dimensioni inferiori a 595x842. Le immagini più grandi si rompono, poiché 595x842 sembra essere la risoluzione in pixel assegnata a una pagina A4. Leggendo in rete, l' -densityopzione potrebbe essere una potenziale soluzione per aumentare il numero di pixel su una pagina A4, ma non sono riuscito a farlo funzionare.

Anche le soluzioni al di fuori di Imagemagick sono benvenute.

Risposte:


8

Una soluzione alternativa è quella di dividere la generazione di immagini e la conversione PDF. Per prima cosa converti le immagini convertin A4 a 300 dpi (ovvero 3508x2479), quindi usa sam2p per convertirle in PDF e quindi usa sam2p_pdf_scale per convertirle 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

Modifica: uno script più completo:

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

Un po 'più pulito dell'altra risposta :

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

Guardalo in azione su http://convertjpgpdf.net .


Funziona magnificamente! Grazie! Sarebbe possibile ottenerlo anche per rimuovere i pdf "temporanei", non concatenati?
Rasmus,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.