web-dev-qa-db-ja.com

画像をPDFにバッチ変換する方法は?

画像(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以外のソリューションももちろん歓迎します。

10
Grumbel

1つの回避策は、画像生成と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 #
8
Grumbel

その他の回答

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 で実際にご覧ください。

2
jobjol