Объединение PDF с GhostScript: использование оригинальных закладок с исправленными номерами страниц - PullRequest
7 голосов
/ 09 ноября 2011

Я использую

gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=book.pdf  -f front-matter.pdf fulltext-0.pdf fulltext-1.pdf back-matter.pdf

для создания одного документа PDF из серии документов PDF. Я собирался включить новую составленную таблицу содержания и включить ее, используя механизм pdfmark . Затем я замечаю, что в исходных файлах уже есть закладки - они, однако, ссылаются на исходные номера страниц, а не на номера в объединенном документе.

Я ищу два возможных решения. Удалите оригинальные закладки или используйте оригинальные закладки, но каким-то образом обновите ссылки на их страницы ...

Ответы [ 2 ]

4 голосов
/ 13 ноября 2011

Как это часто бывает, кто-то прошел по тому же пути до вас ...

разворачивающиеся бедствия нашли решение этой самой проблемыЕго скрипт Python pdf-merge.py сначала вызывает pdftk с его переключателем dump_data, чтобы получить всю информацию о pdfmark.Затем он отслеживает общее количество страниц для каждого объединенного документа и выполняет математическое вычисление для смещения указателя нового номера страницы в инструкции pdfmark на общую сумму количества страниц всех документов PDF, включенных до текущего документа PDF.Так что это близко, но не то же самое, что и двухпроходный подход KenS.Сначала он находит закладки с помощью pdftk, а затем создает новый файл закладок с правильными номерами страниц.Ему также удается превратить исходную инструкцию pdfmark (которая обычно сохраняется gs в noop).Я не буду притворяться, что понимаю, как эта последняя часть работала ...

Однако скрипт делает все, что мне нужно, включая возможность настройки файла закладок перед окончательной записью.Очень аккуратный и шляпный совет Тревору Кингу.

2 голосов
/ 10 ноября 2011

В общем случае pdfwrite не знает, что вы добавляете файлы, поэтому сохраняет закладки и другую информацию «метаданных» при условии, что вы захотите получить ее в выводе.

Однако, когда вы комбинируете файлы PDF, сохранение информации не будет работать, так как номера страниц для второго и последующих файлов будут неправильными.

Так что вам нужен двухэтапный подход, сначала объедините все файлы, отбрасывая закладки, затем «конвертируйте» объединенный файл и добавьте pdfmarks, чтобы установить правильные закладки.

В настоящее время нет опции (с pdfwrite), чтобы не сохранять закладки.Я думаю, вам нужно изменить файлы PostScript интерпретатора Ghostscript PDF для достижения этой цели.Вы можете попробовать установить -dDOPDFMARKS = false, но я сомневаюсь, что это сработает.

...