Вот рабочее решение. Однако вам нужно будет настроить его в соответствии с вашими потребностями.
В моем примере я удалил первую страницу PDF, а затем мне нужно было обновить закладки, чтобы они указывали на правильные местоположения.
удалить страницу 1 из in.pdf:
pdftk A=in.pdf cat A2-end output temp.pdf
создать файл in.info из файла in.pdf:
pdftk in.pdf dump_data > in.info
В моем случае необходимо исправить in.info, так как я удалю страницу.
Таким образом, мне нужно уменьшить BookmarkPageNumber на единицу, чтобы закладки приводили к нужным страницам.
PHP-код:
$file = "in.info";
$data = file_get_contents($file);
foreach (explode("\n", $data) as $row) {
$tmp = explode(": ", $row);
if ($tmp[0] == "BookmarkPageNumber") {
if ($tmp[1] != "1") $tmp[1]--;
echo $tmp[0].": ".$tmp[1]."\n";
} else {
echo $row."\n";
}
}
создать окончательный out.pdf:
pdftk temp.pdf update_info in2.info output out.pdf
протестировал работу на Debian с использованием pdftk 2.01
#!/usr/bin/python output = open('res.info','w') with open('temp.info','r') as f: for line in f: if line.startswith("BookmarkPageNumber"): output.write( "BookmarkPageNumber: "+ str(int(line.split()[1])+1)+"\n") else: output.write(line)
Вам нужно сделать
pdftk in.pdf dump_data > in.info
, а затем добавитьupdate_info
параметр при генерацииout.pdf
. Цитирование изman pdftk
:источник
dump_data_utf8
дляupdate_info_utf8
работы, конечно.pdftk in.pdf dump_data > in.info
,pdftk in.pdf cat 1-22 43 23-42 44-end output out.pdf
иpdftk out.pdf update_info in.info output out1.pdf
Там до сих пор нет закладок вout1.pdf
. `Внимательно читая справочную страницу , он говорит, что
update_info
принимает данные в любом форматеdump_data
. Это, вероятно, должно быть скорректировано в соответствии с перетасовкой страницы. Звучит невозможно , но автоматически это не так.Сайт PDFtk дает только указанный выше результат и создает / редактирует закладки в качестве результатов. Все, что Google знает о закладках в PDF и реорганизации, - это хиты описанных выше операций и лирические описания чудес, которые они предлагают, и этой ветки ;-).
Так что, кажется, это невозможно сделать. Комментарии предлагают некоторые возможности, которые не сработали при попытке.
источник
«pdfmod» - это простой графический инструмент, который позволяет удалить одну или несколько страниц режима из существующего PDF. Это всего лишь вопрос нескольких кликов. Он также сохраняет информацию о содержании и перекрестные ссылки в формате PDF.
«pdftk» работает хорошо, и я использовал его в течение длительного времени, но раньше я терял контент после удаления одной или двух страниц из pdf. Те PDF-файлы, которые тестируются в "pdftk" и "pdfmod", создаются из openoffice.
https://apps.fedoraproject.org/packages/pdfmod
источник
pdfmod
кажется лучше, чемpdftk
когда дело доходит до сохранения метаданных. Различныйexiftool
вывод показывает, чтоpdfmod
сохраняет метаданные, ноpdftk
не сохраняет все, даже если вы используетеdump_data_utf8
&update_info_utf8
.