Я пытаюсь преобразовать 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
Мне интересно, есть ли способ передать аргументы через преобразование в GhostScript, или я застрял в прямом вызове GhostScript?
Ответы:
Вы можете использовать одну командную строку с двумя командами (
gs
,convert
), подключенными через конвейер, если первая команда может записывать свой вывод в стандартный вывод, а вторая может читать свои входные данные из стандартного ввода.... -o %stdout ...
).convert -background transparent - output.png
).Задача решена:
Полное решение:
Обновить
Если вы хотите иметь отдельный PNG для каждой страницы PDF, вы можете использовать
%d
синтаксис:Это будет создавать PNG файлы с именами
page-000.png
,page-001.png
... (Обратите внимание , что%d
-counting с нуля -file-000.png
соответствует странице 1 PDF,001
на странице 2 ...Или, если вы хотите сохранить прозрачный фон, для 100-страничного PDF-файла выполните
источник
-dBATCH -dNOPAUSE -dQUIET
в опции gs.-o output.file
и это автоматически и незаметно также устанавливается-dBATCH -dNOPAUSE -dQUIET
одновременно.Из всех доступных альтернатив я обнаружил, что Inkscape дает наиболее точные результаты при преобразовании PDF-файлов в PNG. Особенно, когда исходный файл имел прозрачные слои, Inkscape преуспел там, где Imagemagick и другие инструменты не смогли.
Я использую эту команду:
И здесь это реализовано в скрипте:
источник
Чтобы преобразовать 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
Что означает каждый вариант:
источник
Также можно использовать входящие в
poppler-utils
пакет утилиты командной строки :Пример:
источник
Не удалось заставить принятый ответ работать. Затем выяснилось, что на самом деле решение намного проще, поскольку Ghostscript не только изначально поддерживает PNG, но даже несколько разных «кодировок» :
png256
png16
pnggray
pngmono
У меня работает следующая команда оболочки:
Он сохранит страницу 2 файла test.pdf в test.png с использованием
pnggray
кодировки и 500 точек на дюйм.источник
Вот обсуждение на немецком языке такой проблемы для файлов SVG, где она решается с помощью
Возможно, это сработает и для вас.
источник
Добавлю свое решение, хоть нить его старая. Может быть, это все равно кому-то поможет.
Во-первых, мне нужно создать PDF-файл. Для этого я использую XeLaTeX :
Теперь ImageMagick и GraphicMagic анализируют параметры слева направо, поэтому первым будет выполнен самый левый параметр. В итоге я использовал эту последовательность для оптимальной обработки:
Он дает красивую графику на прозрачном фоне, обрезанную до того, что на самом деле находится на странице. Параметры
-density
и-resize
обеспечивают лучшую детализацию и увеличивают общее разрешение.Предлагаю проверить, можно ли для вас уменьшить плотность. Это сократит время конвертации.
источник
Для PDF-файла, в котором ImageMagick давал неточные цвета, я обнаружил, что GraphicsMagick справился лучше:
источник
Поскольку на этой странице также перечислены альтернативные инструменты, я упомяну xpdf, в котором есть инструменты командной строки, готовые для Linux / Windows / Mac. Поддерживает прозрачность. Бесплатно для коммерческого использования - в отличие от Ghostscript, у которого поистине возмутительные цены.
В тесте с огромным файлом PDF он был на 7,5% быстрее, чем Ghostscript.
(Также есть конвертеры PDF в текст и HTML)
источник
Попробуйте извлечь одну страницу.
$ page = 4
источник
Мое решение намного проще и прямолинейнее. По крайней мере, это работает на моем ПК (со следующими характеристиками):
с участием
Итак, вот что я использую на своем
file.pdf
:источник
Вы можете использовать ImageMagick, не разделяя первую страницу PDF-файла другими инструментами. Просто делать
Здесь я увеличиваю номинальную плотность на 400% (72 * 4 = 288), а затем изменяю размер на 1/4 (25%). Это дает гораздо лучшее качество результирующего png.
Однако, если PDF-файл имеет формат CMYK, PNG его не поддерживает. Его необходимо преобразовать в sRGB, особенно если он имеет прозрачность, поскольку Ghostscript не может обрабатывать CMYK с альфа-каналом.
источник