Jak zachować zakładki podczas przestawiania stron pliku PDF za pomocą narzędzi takich jak pdftk?


12

Używam pdftkdo przestawiania stron pliku pdf z zakładkami / konturami, ale potem plik wyjściowy utracił zakładki oryginału.

Moje polecenie jest pdftk in.pdf cat 1-22 43 23-42 44-end output out.pdf.

Zastanawiałem się, jak mogę zachować zakładki, zmieniając strony?

Odpowiedzi:


10

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.

  1. usuń stronę 1 z in.pdf:

    pdftk A=in.pdf cat A2-end output temp.pdf
    
  2. utwórz plik in.info z in.pdf:

    pdftk in.pdf dump_data > in.info
    
  3. 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";
        }
    }
    
  4. 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


1
Pracowałem też dla mnie. Może możesz dodać wskazówkę, jak wykonać skrypt (nie mam pojęcia, jak ...) lub dodać skrypt w języku Python:#!/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)
Vser

6

Musisz to zrobić pdftk in.pdf dump_data > in.info, a następnie dodać update_infoparametr 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.


Dzięki! Jak mogę uzyskać ten plik „in.info”?
Tim

@Tim: edytowane. Mam nadzieję, że teraz jest jasne. Trzeba użyć dump_data_utf8do update_info_utf8do pracy, oczywiście.
Philomath

3
Dzięki! To wciąż nie działa. Moje polecenia są w trzech etapach: pdftk in.pdf dump_data > in.info, pdftk in.pdf cat 1-22 43 23-42 44-end output out.pdfa pdftk out.pdf update_info in.info output out1.pdfNadal nie ma zakładki w out1.pdf. `
Tim

@Tim Mogę potwierdzić, że to naprawdę nie działa. Czy przypadkiem znalazłeś jakieś rozwiązanie?
Glutanimate,

1
Mój pobieżny włok Google sugeruje, że zakładki nie są w ogóle obsługiwane.
vonbrand

5

Uważnie czytając stronę podręcznika , mówi, że update_infopobiera dane w dowolnym dump_datagenerowanym 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.


1

„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.

https://apps.fedoraproject.org/packages/pdfmod


pdfmodwydaje się lepszy niż w pdftkprzypadku zachowania metadanych. Różnica exiftoolwyników pokazuje, że pdfmodzachowuje metadane, ale pdftknie zachowuje wszystkiego, nawet jeśli używasz dump_data_utf8& update_info_utf8.
user1338062,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.