Odpowiedzi:
Oto działające rozwiązanie. Musisz jednak dostosować go do swoich potrzeb.
W moim przykładzie usunąłem pierwszą stronę pliku PDF, a następnie potrzebowałem zaktualizować zakładki, aby wskazywały prawidłowe lokalizacje.
usuń stronę 1 z in.pdf:
pdftk A=in.pdf cat A2-end output temp.pdf
utwórz plik in.info z in.pdf:
pdftk in.pdf dump_data > in.info
in.info musi zostać poprawiony w moim przypadku, ponieważ usunę stronę.
Dlatego muszę zmniejszyć BookmarkPageNumber o jeden, aby zakładki prowadziły do właściwych stron.
kod 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";
}
}
utwórz końcowy out.pdf:
pdftk temp.pdf update_info in2.info output out.pdf
przetestowany na Debianie przy użyciu pdftk 2.01
Musisz to zrobić pdftk in.pdf dump_data > in.info
, a następnie dodać update_info
parametr podczas generowania out.pdf
. Cytowanie z man pdftk
:
update_info <info data filename | - | PROMPT>
Zmienia metadane przechowywane w słowniku informacyjnym pojedynczego pliku PDF, aby pasowały do pliku danych wejściowych. Plik danych wejściowych wykorzystuje tę samą składnię, co wyjście z dump_data. Znaki inne niż ASCII powinny być kodowane jako jednostki numeryczne XML. Nie zmienia to metadanych przechowywanych w strumieniu XMP pliku PDF, jeśli taki istnieje. Na przykład:
pdftk in.pdf update_info in.info output out.pdf
update_info_utf8 <info data filename | - | PROMPT>
To samo co update_info, tyle że wejście jest zakodowane jako UTF-8.
dump_data_utf8
do update_info_utf8
do pracy, oczywiście.
pdftk in.pdf dump_data > in.info
, pdftk in.pdf cat 1-22 43 23-42 44-end output out.pdf
a pdftk out.pdf update_info in.info output out1.pdf
Nadal nie ma zakładki w out1.pdf
. `
Uważnie czytając stronę podręcznika , mówi, że update_info
pobiera dane w dowolnym dump_data
generowanym formacie . Prawdopodobnie należałoby to dostosować zgodnie z tasowaniem strony. Nie brzmi to niemożliwe , ale nie jest automatyczne.
Witryna PDFtk podaje tylko powyższe trafienie i tworzenie / edytowanie zakładek jako wyników. Wszystko, co Google wie o kwestii zakładek w PDF i reorganizacji, to trafienia w powyższe operacje i liryczne ekspozycje na temat cudów, które oferują, i ten wątek ;-).
Wygląda na to, że nie da się tego zrobić. Komentarze sugerują pewne możliwości, które nie działały podczas próby.
„pdfmod” to proste narzędzie graficzne, które pozwala usunąć jedną lub kilka stron z istniejącego pliku PDF. To tylko kwestia kilku kliknięć. Zachowuje również informacje o zawartości i linkowanie w pliku pdf.
„pdftk” działa dobrze i używałem go przez długi czas, ale traciłem zawartość po usunięciu jednej lub dwóch stron z pliku pdf. Te pliki pdf, które są testowane w „pdftk” i „pdfmod” są tworzone z openoffice.
pdfmod
wydaje się lepszy niż w pdftk
przypadku zachowania metadanych. Różnica exiftool
wyników pokazuje, że pdfmod
zachowuje metadane, ale pdftk
nie zachowuje wszystkiego, nawet jeśli używasz 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)