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

15

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

Андрей
источник

Ответы:

17

Да, вам придется конвертировать каждую страницу 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 pt) в вашем PDF, и вы хотите сохранить это, но также добавьте интервал 11pt к горизонтальному и 22 pt к вертикальному направлению плитки (плюс 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. Кроме того, качество изображения объединенного изображения все еще дрянное, я буквально не могу прочитать слово от этого.
Компьютерщик
2

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

montage -tile 5 thispdfis25pages.pdf tiledoverview.jpg

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

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