Làm cách nào để chuyển đổi hàng loạt hình ảnh thành PDF?


10

Tôi muốn chuyển đổi hàng loạt hình ảnh (jpg, png, v.v.) sang PDF. Chuyển đổi chúng trực tiếp thành PDF rất dễ dàng với:

convert in.jpg out.pdf

Tuy nhiên, tôi cần thêm một số tùy chọn, chẳng hạn như đặt kích thước trang đầu ra, lề và xoay giữa định dạng ngang và dọc. Sau một số thử nghiệm và lỗi tôi đã đưa ra:

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

Điều này tập trung hình ảnh trên một trang A4 và tự động xoay giữa phong cảnh và dọc, tuy nhiên nó chỉ hoạt động với các hình ảnh nhỏ dưới 595x842. Hình ảnh lớn hơn bị phá vỡ, vì 595x842 dường như là độ phân giải pixel được gán cho trang A4. Đọc trên mạng, -densitytùy chọn có thể là một giải pháp tiềm năng để tăng số pixel trên trang A4, nhưng tôi không thể làm cho nó hoạt động.

Các giải pháp bên ngoài Imagemagick tất nhiên cũng được chào đón.

Câu trả lời:


8

Một cách giải quyết khác là phân chia thế hệ hình ảnh và chuyển đổi PDF. Đầu tiên, chuyển đổi hình ảnh qua convertA4 @ 300dpi (tức là 3508x2479), sau đó sử dụng sam2p để chuyển đổi chúng thành PDF và sau đó sử dụng sam2p_pdf_scale để chuyển đổi chúng sang 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

Chỉnh sửa: Một kịch bản hoàn chỉnh hơn:

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

Sạch sẽ hơn một chút so với câu trả lời khác :

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

Xem nó trong hành động tại http://convertjpgpdf.net .


Điều này làm việc rất đẹp! Cảm ơn! Cũng có thể lấy nó để xóa các tệp pdf "tạm thời", không được nối?
Rasmus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.