วิธีการ batch แปลงรูปภาพเป็น 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 ก็ยินดีเช่นกัน

คำตอบ:


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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.