Як пакетне перетворення зображення в PDF?


10

Я хочу пакетно перетворити зображення (jpg, png тощо) у PDF. Перетворити їх безпосередньо в PDF легко за допомогою:

convert in.jpg out.pdf

Однак мені потрібні ще кілька варіантів, такі як встановлення розміру вихідної сторінки, поля та обертання між форматом пейзажу та портретом. Після деяких проб і помилок я придумав:

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

Це центрує зображення на сторінці формату А4 і автоматично обертається між пейзажем і портретом, однак воно працює лише з невеликими зображеннями нижче 595x842. Більше зображення розбиваються, оскільки 595x842, здається, є роздільною здатністю у пікселях, яка призначена сторінці A4. Читаючи по мережі, -densityваріант може стати потенційним рішенням для збільшення кількості пікселів на сторінці А4, але я не міг змусити його працювати.

Безумовно, вітаються також рішення поза межами 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 .


Це прекрасно працює! Дякую! Чи можна було б також отримати його для видалення "тимчасових", не зв'язаних pdfs?
Расмус
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.