Відповіді:
Ось робоче рішення. Однак вам потрібно буде відкоригувати його відповідно до ваших потреб.
У своєму прикладі я видалив першу сторінку 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)