Преобразование PDF в PNG

Я пытаюсь преобразовать PDF в изображение PNG (по крайней мере, обложку одного). Я успешно извлекаю первую страницу PDF с помощью pdftk. Я использую imagemagick, чтобы сделать преобразование:

convert cover.pdf cover.png

Это работает, но, к сожалению, файл cover.png отображается неправильно (некоторые альфа-объекты в PDF отображаются неправильно). Я знаю, что ImageMagick использует GhostScript для выполнения преобразования, и если я делаю это напрямую с помощью gs, я могу получить желаемые результаты, но я бы предпочел использовать библиотеку преобразования, поскольку в ней есть другие инструменты, которые я хотел бы использовать.

Эта команда в GhostScript выполняет желаемое изображение:

gs -sDEVICE=pngalpha -sOutputFile=cover.png -r144 cover.pdf

Мне интересно, есть ли способ передать аргументы через convert в GhostScript или я застрял с непосредственным вызовом GhostScript?

68 голосов | спросил Adam 17 MaramTue, 17 Mar 2009 11:18:51 +03002009-03-17T11:18:51+03:0011 2009, 11:18:51

9 ответов


0

Вы можете использовать одну командную строку с двумя командами (gs, convert) подключается через канал, если первая команда может записать свой вывод в stdout, а вторая может прочитать свой ввод из stdin.

  1. К счастью, gs может писать в стандартный вывод (... -o %stdout ...).
  2. К счастью, конвертировать можно читать из стандартного ввода (convert -background transparent - output.png).

Проблема решена:

  • GS используется для альфа-канала для обработки специального изображения,
  • convert, используемый для создания прозрачного фона,
  • канал, используемый для предотвращения записи временного файла на диск.

Полное решение:

gs -sDEVICE=pngalpha       \
   -o %stdout              \
   -r144 cover.pdf         \
   |                       \
convert                    \
   -background transparent \
   -                       \
    cover.png

Update

Если вы хотите иметь отдельный PNG для каждой страницы PDF, вы можете использовать синтаксис %d:

gs -sDEVICE=pngalpha -o file-%03d.png -r144 cover.pdf

Это создаст файлы PNG с именем page-000.png, page-001.png, ... (Обратите внимание, что %d -счет начинается с нуля - file-000.png соответствует странице 1 PDF, 001 - странице 2 ...

Или, если вы хотите сохранить прозрачный фон, для 100-страничного PDF, сделайте

for i in {1..100}; do        \
                             \
  gs -sDEVICE=pngalpha       \
     -dFirstPage="${i}"      \
     -dLastPage="${i}"       \
     -o %stdout              \
     -r144 input.pdf         \
     |                       \
  convert                    \
     -background transparent \
     -                       \
      page-${i}.png ;        \
                             \
done
ответил Kurt Pfeifle 1 AM000000120000000231 2010, 00:14:02
0

Из всех доступных альтернатив я обнаружил, что Inkscape дает наиболее точные результаты при преобразовании PDF-файлов в PNG. Особенно, когда исходный файл имел прозрачные слои, Inkscape преуспел там, где Imagemagick и другие инструменты потерпели неудачу.

Это команда, которую я использую:

inkscape "$pdf" -z --export-dpi=600 --export-area-drawing --export-png="$pngfile"

И здесь это реализовано в скрипте:

#!/bin/bash

while [ $# -gt 0 ]; do

pdf=$1
echo "Converting "$pdf" ..."
pngfile=`echo "$pdf" | sed 's/\.\w*$/.png/'`
inkscape "$pdf" -z --export-dpi=600 --export-area-drawing --export-png="$pngfile"
echo "Converted to "$pngfile""
shift

done

echo "All jobs done. Exiting."
ответил Glutanimate 18 MarpmMon, 18 Mar 2013 22:59:30 +04002013-03-18T22:59:30+04:0010 2013, 22:59:30
0

Для преобразования pdf в файлы изображений используйте следующие команды:

Для PNG gs -sDEVICE=png16m -dTextAlphaBits=4 -r300 -o a.png a.pdf

Для JPG gs -sDEVICE=jpeg -dTextAlphaBits=4 -r300 -o a.jpg a.pdf

Если у вас есть несколько страниц, добавьте к имени % 03d gs -o a%03d.jpg a.pdf

Что означает каждый параметр:

  • sDEVICE = {jpeg, pngalpha, png16m ...} - тип файла
  • -o - выходной файл (% stdout к stdout)
  • -dTextAlphaBits = 4 - сглаживание шрифта.
  • -r300 - 300 т /д
ответил yanpas 4 32015vEurope/Moscow11bEurope/MoscowWed, 04 Nov 2015 20:52:10 +0300 2015, 20:52:10
0

Можно также использовать утилиты командной строки, включенные в пакет poppler-utils:

sudo apt-get install poppler-utils
pdftoppm --help
pdftocairo --help

Пример:

pdftocairo -png mypage.pdf mypage.png
ответил turdus-merula 23 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 23 Sep 2017 16:24:24 +0300 2017, 16:24:24
0

Не удалось получить принятый ответ для работы. Затем выяснилось, что на самом деле решение в любом случае намного проще, поскольку Ghostscript не только изначально поддерживает PNG, но даже несколько разные "кодировки" :

    png256 литий> png16 литий> pnggray литий> pngmono литий>
  • ...

Команда оболочки, которая работает для меня:

gs -dNOPAUSE -q -sDEVICE=pnggray -r500 -dBATCH -dFirstPage=2 -dLastPage=2 -sOutputFile=test.png test.pdf

Это сохранит страницу 2 файла test.pdf в test.png с использованием кодировки pnggray и 500 DPI.

ответил Raffael 17 MarpmTue, 17 Mar 2015 22:50:05 +03002015-03-17T22:50:05+03:0010 2015, 22:50:05
0

Вот о такой проблеме для файлов SVG, где она решается с помощью

convert -background transparent

Возможно, это работает и для вас.

ответил schnaader 17 MaramTue, 17 Mar 2009 11:34:44 +03002009-03-17T11:34:44+03:0011 2009, 11:34:44
0

Я добавлю свое решение, даже думал, что его тема старая. Может быть, это все равно кому-то поможет.

Сначала мне нужно создать PDF. Я использую XeLaTeX для этого:

xelatex test.tex

Теперь ImageMagick и GraphicMagic оба параметра разбора слева направо, поэтому самый левый параметр будет выполняться первым. В итоге я использовал эту последовательность для оптимальной обработки:

gm convert -trim -transparent white -background transparent -density 1200x1200 -resize 25% test.pdf test.png

Это дает хорошую графику на прозрачном фоне, обрезанную до того, что на самом деле на странице. Параметры -density и -resize дают улучшенная детализация и общее разрешение.

Я предлагаю проверить, может ли плотность быть уменьшена для вас. Это сократит время конвертации.

ответил polemon 11 J000000Wednesday12 2012, 16:04:44
0

Для PDF, который ImageMagick давал неточные цвета, я обнаружил, что GraphicsMagick справился лучше:

$ gm convert -quality 100 -thumbnail x300 -flatten journal.pdf\[0\] cover.jpg
ответил aorth 2 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 02 Sep 2015 10:00:16 +0300 2015, 10:00:16
0

Мое решение намного проще и прямее. По крайней мере, так работает на моем ПК (со следующими характеристиками):

[email protected]: my.folder$ uname -a
Linux home 3.2.0-54-generic-pae #82-Ubuntu SMP Tue Sep 10 20:29:22 UTC 2013 i686 i686 i386 GNU/Linux

с

[email protected]: my.folder$ convert --version
Version: ImageMagick 6.6.9-7 2012-08-17 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC
Features: OpenMP

Итак, вот что я запускаю на своем file.pdf:

[email protected]: my.folder$ convert -density 300 -quality 100 file.pdf file.png
ответил polarise 16 62013vEurope/Moscow11bEurope/MoscowSat, 16 Nov 2013 17:41:00 +0400 2013, 17:41:00

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132