Использование Ghostscript для преобразования многостраничного PDF в один JPG?

19838
Andrew

Я знаю, что Ghostscript может конвертировать PDF-файлы в JPG, а в случае многостраничного PDF-файла может конвертировать каждую страницу в отдельный JPG. Но возможно ли сделать так, чтобы он копировал их в один JPG, чтобы страницы вставлялись друг в друга, например, верхняя половина JPG - это страница 1, нижняя половина - страница 2? Или мне нужно использовать другую программу (и может ли это сделать ImageMagick?), Чтобы объединить страницы JPG в одно изображение?

13

2 ответа на вопрос

15
Kurt Pfeifle

Да, вам придется конвертировать каждую страницу PDF в один файл JPG (Ghostscript может это сделать).

Затем соедините получившиеся файлы JPG с помощью другой программы ( ImageMagick или GraphicsMagic могут сделать это, используя свои montageподкоманды).

Я не знаю ни о каком программном обеспечении, которое может сделать это за один раз.

Преобразование PDF в JPG (с помощью Ghostscript): вам нужно убедиться, что вы получите наилучший возможный результат. Поэтому убедитесь, что вы настроили параметры командной строки, чтобы они работали для вас. Я бы начал с этого:

gswin32c.exe ^ -dBATCH ^ -dNOPAUSE ^ -dSAFER ^ -sDEVICE=jpeg ^ -dJPEGQ=95 ^ -r600x600 ^ -sOutputFile=c:/path/to/jpeg-dir/pdffile-%03d.jpeg ^ c:/path/to/pdffile.pdf 

Это создаст JPG с именами pdffile-001.jpeg, pdffile-002.jpg и т. Д. Параметр * -dJPEGQ = 95 "устанавливает" Качество JPEG "на 95%. Используется разрешение" 600x600 точек на дюйм ". Возможно, вам понадобится дополнительно контролируйте размер страниц в результате JPG в случае, если ваш Ghostscript по умолчанию не соответствует вашим потребностям:

gswin32c.exe ^ -dBATCH ^ -dNOPAUSE ^ -dSAFER ^ -sDEVICE=jpeg ^ -dJPEGQ=95 ^ -r600x600 ^ -dPDFFitPage ^ -dFIXEDMEDIA ^ -dDEVICEWIDTHPOINTS=800 ^ -dDEVICEHEIGHTPOINTS=600 ^ -sOutputFile=c:/path/to/jpeg-dir/pdffile-%03d.jpeg ^ c:/path/to/pdffile.pdf 

или же

gswin32c.exe ^ -dBATCH ^ -dNOPAUSE ^ -dSAFER ^ -sDEVICE=jpeg ^ -dJPEGQ=95 ^ -r600x600 ^ -dPDFFitPage ^ -dFIXEDMEDIA ^ -sDEFAULTPAPERSIZE=a4 ^ -sOutputFile=c:/path/to/jpeg-dir/pdffile-%03d.jpeg ^ c:/path/to/pdffile.pdf 

кратно к одной JPG-шить с montage(ImageMagick или GraphicsMagick):montage команда (используемая в этом примере является ImageMagick) позволяет контролировать образец плитки. Если вы используете, например,-tile 4x3вы получите этот макет наложения:

1 2 3 4  5 6 7 8  9 10 11 12  

Вы можете использовать эту команду для сшивания 12 отдельных JPG в один:

montage ^ -border 0 ^ -tile 4x3 ^ c:/path/to/jpeg-dir/pdffile-*.jpeg ^ c:/path/to/final.jpg 

Конечно, montageимеет много десятков дополнительных параметров, которые позволяют вам определить фон, интервал, смещения, оформление, метки, вращение, обрезку, заголовок и т. Д. Для ввода и результирующего JPG.


РЕДАКТИРОВАТЬ: (Я хотел дать эту подсказку уже в моем исходном ответе, но забыл.)montageПо умолчанию будет использовать плитки размером 120x120 пикселей. Если вы хотите сохранить исходные размеры страниц для каждой плитки, вы должны добавить-geometryв командную строку. Предполагаячто вы имели A4 (= 595x852 пт) страниц в формате PDF, и вы хотите сохранить это, но и добавить интервал 11pt к горизонтали и 22 пт в вертикальном направлении кровлю (плюс 4PT сильные серые границы / каркасных линий вокруг каждой плитки), сделайте это:

montage ^ -border 4 ^ -tile 4x3 ^ -geometry 595x842+11+22 ^ c:/path/to/jpeg-dir/pdffile-*.jpeg ^ c:/path/to/final.jpg 

РЕДАКТИРОВАТЬ 2: (Пропущена еще одна важная подсказка.) Если вы не хотите терять хорошее качество изображения во время процесса сшивания / монтажа, который создал ваше преобразование PDF в JPG, то также добавьте-quality 100параметр в командную строку, как этот :

montage ^ -border 4 ^ -tile 4x3 ^ -geometry 595x842+11+22 ^ -quality 100 ^ c:/path/to/jpeg-dir/pdffile-*.jpeg ^ c:/path/to/final.jpg 
Спасибо за ваш ответ. Я не вижу геометрический параметр в ImageMagick 6.9.9. Кроме того, качество изображения объединенного изображения все еще дрянное, я буквально не могу прочитать слово от этого. Geek 6 лет назад 0
2
erjiang

Поскольку в ImageMagick встроена поддержка GhostScript, вы можете сделать все это за один раз:

montage -tile 5 thispdfis25pages.pdf tiledoverview.jpg 

который займет каждую страницу и создаст один длинный jpeg из них сквозной.

Но это *** НЕ *** даст вам высокое качество JPG, потому что он будет использовать Ghostscript со своими настройками по умолчанию (и они довольно просты для вывода JPG). Выполнение этого в 2 шага (и проверка ваших страниц JPG в первую очередь) дает вам оптимальный контроль, а также довольно хороший вывод JPG). Kurt Pfeifle 13 лет назад 1
Вы можете изменить настройки Ghostscript с помощью параметра -density ImageMagick для PDF и получить столь же хорошие результаты. Не стучите в IM, если вы не знаете, как использовать его параметры. erjiang 13 лет назад 0
К .: Эй, я не стучал ImageMagick. И я знаю, как использовать его параметры, даже с применением цветовых профилей ICC ... Но вы не можете передать ** все ** параметры Ghostscript для монтажа. Мой комментарий ссылался на вашу предложенную команду, которая ** не ** упоминала `-density`. Kurt Pfeifle 13 лет назад 1
Кстати, я читал в другом месте на SO, что ImageMagick внутренне преобразует из PDF в PS, а затем из PS в PNG, когда вы вызываете его таким образом, так что это еще одна причина, чтобы не делать это таким образом (два преобразования => более низкого качества и медленнее). Ibrahim 11 лет назад 0

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