Вы также можете объединить несколько PDF-файлов с Ghostscript. Большим преимуществом этого пути является то, что решение легко поддается написанию сценариев и не требует реального программирования:
gswin32c.exe ^
-dBATCH -dNOPAUSE ^
-sDEVICE=pdfwrite ^
-sOutputFile=merged.pdf ^
[...more Ghostscript options as needed...] ^
input1.pdf input2.pdf input3.pdf [....]
С Ghostscript вы сможете передавать pdfmark операторов, которые могут добавлять оглавление, а также закладки для каждого дополнительного исходного файла, входящего в итоговый PDF. Например:
gswin32c.exe ^
-dBATCH -dNOPAUSE ^
-sDEVICE=pdfwrite ^
-sOutputFile=merged.pdf ^
[...more Ghostscript options as needed...] ^
file-with-pdfmarks-to-generate-a-ToC.ps ^
-f input1.pdf input2.pdf input3.pdf [....]
или
gswin32c.exe ^
-dBATCH -dNOPAUSE ^
-sDEVICE=pdfwrite ^
-sOutputFile=merged.pdf ^
[...more Ghostscript options as needed...] ^
file-with-pdfmarks-to-generate-a-ToC.ps ^
-f input1.pdf ^
input2.pdf ^
input3.pdf [....]
Для ознакомления с темой pdfmark см. Также Томас Мерц PDFmark Primer .
Edit:
Я хотел дать вам пример для file-with-pdfmarks-to-generate-a-ToC.ps
, но как-то забыл это. Вот оно:
[/Page 1 /View [/XYZ null null null] /Title (File 1) /OUT pdfmark
[/Page 2 /View [/XYZ null null null] /Title (File 2) /OUT pdfmark
[/Page 3 /View [/XYZ null null null] /Title (File 3) /OUT pdfmark
[/Page 4 /View [/XYZ null null null] /Title (File 4) /OUT pdfmark
Это создаст ToC для первых 4 файлов == первых 4 страниц (так как вы гарантируете, что ваши файлы ингредиентов по одной странице для вашего объединенного выходного PDF).
- Часть
[/XYZ null null null]
гарантирует, что область просмотра страницы и уровень масштабирования не изменятся с текущего при переходе по ссылке. (Вы можете сказать [/XYZ 222 111 2]
, чтобы сделать это, если хотите произвольный пример.)
-
/Title (some string you want)
thingie определяет, какой текст в ToC.
И вы можете даже напрямую добавить эти параметры в командную строку Ghostscript:
gswin32c.exe ^
-o merged.pdf ^
[...more Ghostscript options as needed...] ^
-c "[/Page 1 /View [/XYZ null null null] /Title (File 1) /OUT pdfmark" ^
-c "[/Page 2 /View [/XYZ null null null] /Title (File 2) /OUT pdfmark" ^
-c "[/Page 3 /View [/XYZ null null null] /Title (File 3) /OUT pdfmark" ^
-c "[/Page 4 /View [/XYZ null null null] /Title (File 4) /OUT pdfmark" ^
-f input1.pdf ^
input2.pdf ^
input3.pdf ^
input4.pdf [....]
'nother Редактировать:
Да, и кстати: Ghostscript делает сохраняет закладки, когда вы используете его для объединения двух файлов PDF в один - pdftk.exe нет. Давайте использовать тот, который сгенерирован командой моего первого редактирования (эффективно объединяя 2 копии одного и того же файла):
gswin32c ^
-sDEVICE=pdfwrite ^
-o doublemerged.pdf ^
merged.pdf ^
merged.pdf
Файл doublemerged.pdf
теперь будет иметь 2 * 4 = 8 закладок.
- Как и ожидалось: закладки 1, 2, 3 и 4 ссылаются на страницы 1, 2, 3 и 4.
- Проблема в том, что закладки 5, 6, 7 и 8 также имеют ссылки на страницах 1, 2, 3 и 4.
Причина в том, что ранее существующие закладки действительно указывали на целевые ссылки по абсолютным номерам страниц. Чтобы обойти это (и закладки работают в объединенных файлах), необходимо создать закладки, которые указывают на связь целей по именованным адресатам (и убедитесь, что они уникальны для всех документов, которые объединяются).
(Этот подход также работает в Linux, просто используйте gs вместо gswin32c.)
Приложение
Выше командной строки используется [...more Ghostscript options as needed...]
в качестве заполнителя для дополнительных параметров.
Если вы не используете другие параметры, Ghostscript будет применять свои встроенные значения по умолчанию для различных параметров. Однако это может дать вам результаты, которые могут вам не понравиться. Поскольку Ghostscript генерирует совершенно новый PDF на основе входных данных, это означает, что некоторые из исходных объектов могут быть изменены. Это верно для цветовых пространств и уровней сжатия изображения.
Как применить параметры, которые оставляют изначально встроенные изображения без изменений, можно увидеть в SuperUser: «Использовать Ghostscript, но запретить повторную обработку изображений» .