Ответы:
Вот рабочее решение. Однако вам нужно будет настроить его в соответствии с вашими потребностями.
В моем примере я удалил первую страницу 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
Вам нужно сделать pdftk in.pdf dump_data > in.info
, а затем добавить update_info
параметр при генерации out.pdf
. Цитирование из man pdftk
:
update_info <info data filename | - | PROMPT>
Изменяет метаданные, хранящиеся в отдельном информационном словаре PDF, в соответствии с файлом входных данных. Файл входных данных использует тот же синтаксис, что и вывод из dump_data. Не-ASCII символы должны быть закодированы в виде числовых объектов XML. Это не меняет метаданные, хранящиеся в потоке XMP PDF, если они есть. Например:
pdftk in.pdf update_info in.info output out.pdf
update_info_utf8 <info data filename | - | PROMPT>
То же, что update_info, за исключением того, что вход кодируется как UTF-8.
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.
pdfmod
кажется лучше, чем pdftk
когда дело доходит до сохранения метаданных. Различный exiftool
вывод показывает, что pdfmod
сохраняет метаданные, но pdftk
не сохраняет все, даже если вы используете dump_data_utf8
& update_info_utf8
.
#!/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)