Объединить PDF с PDFTK с закладками? - PullRequest
33 голосов
/ 04 июня 2010

Использование pdftk для объединения нескольких PDF-файлов работает хорошо. Тем не менее, любой простой способ сделать закладку для каждого объединенного PDF?

Я не вижу ничего в документации по pdftk по этому поводу, поэтому я не думаю, что это возможно с pdftk.

Все наши файлы будут объединены в одну страницу, так что интересно, есть ли какая-либо другая утилита, которая впоследствии может добавить в закладки?

Или другая утилита pdf на основе linux, которая позволит объединяться при указании закладки для каждого отдельного pdf.

Ответы [ 11 ]

0 голосов
/ 15 декабря 2015

Ниже приводится комментарий к ответу от pdfmerger (https://stackoverflow.com/a/30524828/3915004).

Спасибо за ваш скрипт pdfmerger! Я знаю, что вопрос помечен как linux, но чтобы обобщить ваш скрипт для Mac OS X, нужно 2 вещи:

  • ghostscript gs и
  • команда pdfinfo (которая включена, например, в poppler)

Установите их, получив сначала brew (Google, он устанавливается с помощью некоторой команды curl / ruby-magic ^^), а затем просто:

brew install ghostscript
brew install poppler

ДОБАВЛЕНИЕ: ЧИТАТЬ ТЕКСТ-ФАЙЛ С НАЗВАНИЯМИ ГЛАВЫ:

Для расширения вашего сценария. Я использую этот рабочий процесс в основном для книг, доступных для загрузки глав с сайта редакторов. Текстовый файл, содержащий названия глав, может быть легко сгенерирован. Следующая надстройка к вашему коду дополнительно читает текстовый файл 'chapters.txt', содержащий одну строку в pdf для слияния. (Обратите внимание, я не выполнял проверку количества строк, соответствующих количеству файлов в формате PDF.)

Просто разверните ваш скрипт, заменив следующие строки:

p = subprocess.Popen('ls *pdf', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
c = subprocess.Popen('less chapters.txt', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

pdfdateien = []
kombinationen = []
chapternames = []

for line in c.stdout.readlines():
# c contains all chapter-titles
  chapternames.append(line)

for line in p.stdout.readlines():

и

for index, kombination in enumerate(kombinationen):
#  dateiname = kombination[0][0:len(kombination[0])-5]
#
# Hier noch dateiname evtl. verwursten
# z. B.
#  lesezeichen = dateiname[0:1]+" "+dateiname[6:8]+"/"+dateiname[1:5]
#  lesezeichen = dateiname
  lesezeichen=chapternames[index][:-1]

  anz_seiten = kombination[1][16:len(kombination[1])-1]
...