Dodaj i edytuj zakładki do pdf

22

Pobierając metadane z niektórych plików pdf z zakładkami pdftk, obserwuję format zakładek w metadanych pdf. Zgaduję, że za pomocą pdftkmożna dodawać i edytować zakładki pliku pdf.

Oto trzy kroki, które wykonuję:

  1. Najpierw otrzymuję metadane (w tym ewentualne zakładki) z pliku pdf do pliku tekstowego przez pdftk in.pdf dump_data > in.info.
  2. Następnie dodaję zakładki do pliku tekstowego metadanych in.info, zmieniając go z

    InfoKey: Creator
    InfoValue: PScript5.dll Version 5.2
    InfoKey: Title
    InfoValue: SSReader Print.
    InfoKey: Producer
    InfoValue: Acrobat Distiller 7.0 (Windows)
    InfoKey: Author
    InfoValue: Administrator
    InfoKey: ModDate
    InfoValue: D:20050605073244+08'00'
    InfoKey: CreationDate
    InfoValue: D:20050605073244+08'00'
    PdfID0: 591a87c91dc76881fdf2ccf3811e72a5
    PdfID1: 6b6ab11de8824e438e4f5eb1d85ec72
    NumberOfPages: 400
    PageLabelNewIndex: 1
    PageLabelStart: 1
    PageLabelNumStyle: DecimalArabicNumerals
    

    do

    InfoKey: Creator
    InfoValue: PScript5.dll Version 5.2
    InfoKey: Title
    InfoValue: SSReader Print.
    InfoKey: Producer
    InfoValue: Acrobat Distiller 7.0 (Windows)
    InfoKey: Author
    InfoValue: Administrator
    InfoKey: ModDate
    InfoValue: D:20050605073244+08'00'
    InfoKey: CreationDate
    InfoValue: D:20050605073244+08'00'
    PdfID0: 591a87c91dc76881fdf2ccf3811e72a5
    PdfID1: 6b6ab11de8824e438e4f5eb1d85ec72
    NumberOfPages: 400
    BookmarkBegin
    BookmarkTitle: Front cover
    BookmarkLevel: 1
    BookmarkPageNumber: 1
    BookmarkBegin
    BookmarkTitle: About the Author
    BookmarkLevel: 1
    BookmarkPageNumber: 5
    BookmarkBegin
    BookmarkTitle: Title page
    BookmarkLevel: 1
    BookmarkPageNumber: 6
    BookmarkBegin
    BookmarkTitle: Copyright page
    BookmarkLevel: 1
    BookmarkPageNumber: 7
    BookmarkBegin
    BookmarkTitle: Foreword
    BookmarkLevel: 1
    PageLabelNewIndex: 1
    PageLabelStart: 1
    PageLabelNumStyle: DecimalArabicNumerals
    
  3. Następnie próbuję przywrócić edytowane metadane do pliku pdf przez pdftk in.pdf update_info in.info output out.pdf.

Ale kiedy otwieram nowy plik pdf out.pdfw czytniku evince lub Adobe, w nowym pliku pdf nie ma zakładki.

Jeśli dostanę metadane z nowego pliku pdf out.pdfprzez pdftk out.pdf dump_data > out.info, nie będzie w zakładki out.info. Wygląda na to, że zakładki nie zostały dodane pomyślnie.

Zastanawiałem się, czy są jakieś błędy? Jak dodać i edytować zakładki pliku pdf, niekoniecznie przez pdftk?

Tim
źródło
1
To małe narzędzie graficzne działało dla mnie. (PDF Mod 0.9.1) apps.fedoraproject.org/packages/pdfmod
abhijit

Odpowiedzi:

12

Wygląda mi na to, że od wersji 1.45 (2012-12-06) pdftk pozwala modyfikować zakładki za pomocą polecenia update_info:

Możesz teraz dodawać lub zmieniać zakładki PDF za pomocą update_info.

przez: http://www.pdflabs.com/docs/pdftk-version-history/

użytkownik37186
źródło
3
To działało bardzo dobrze dla mnie. Należy dodać to w pliku wejściowym nad BookmarkBegintagami przed brakiem każdego wpisu zakładki.
danielp
4

jPDFtweak (Java, więc działa na systemach Unix / Linux) może zmieniać zakładki, ale nie wiem, czy można przy pomocy tego skryptu coś zrobić.

W przypadku skryptów domyślam się, że jedyną natywną opcją dla systemu Unix / Linux byłby pdflatex z pakietem pdfpages. Ale to krzywa uczenia się, jeśli nie jesteś jeszcze użytkownikiem LaTeX.

EDIT: Faktycznie może to być możliwe z Ghostscript: Zobacz tutaj lub tutaj lub tutaj

frabjous
źródło
4

Jeśli nadal trzymasz się tych skryptów uniksowych, to

  1. wyodrębnij dane zakładek zrzucone pdftk
  2. napisz jeden dodatkowy skrypt, aby przekonwertować zrzucone dane zakładek do formatu pdfmarks, które polecenie ghostscript gsjest akceptowane.
  3. użyj gsskryptu, aby połączyć je ze znakami pdf

Spójrz na http://blog.tremily.us/posts/PDF_bookmarks_with_Ghostscript/ skrypt pdf-merge.pyrobi dokładnie to, co chcesz (lub ja).

pdf-merge.py --output=merged.pdf input1.pdf input2.pdf

W jego skrypcie można wprowadzić niewielkie poprawki

  1. obsługa Unicode
  2. wyjściowe pliki zakładek, aby ludzie mogli je również dostosować

W każdym razie powinno działać

Larrycai
źródło
Jedna opinia! Dzięki! Czekam na twój skrypt!
Tim
Wygląda na to, że link nie działa. Czy możesz to naprawić?
Fish Monitor
4

pdftk jest zdecydowanie właściwym narzędziem (z odpowiednią składnią):

BookmarkBegin
BookmarkTitle: Chapter 1
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
BookmarkTitle: Paragraph 1.1
BookmarkLevel: 2
BookmarkPageNumber: 1
Carlo
źródło
2

Caleb,

O ile rozumiem, zakładek zgodnie ze specyfikacją PDF nie można wstrzykiwać za pomocą narzędzia diagnostycznego, takiego jak pdftk. Aktualizacja metadanych w celu odniesienia do rozdziałów i zakotwiczeń do lądowania zakładek, które nie istnieją, na pewno nie zadziała, może nawet spowodować niespójność lub niemożność otwarcia pliku PDF.

Skończyło się na tym, że korzystam z bibliotek java + iText zgodnie z tym samouczkiem , ale codziennie mamy do czynienia z setkami plików pdf, więc musiała zostać zautomatyzowana. Jeśli robisz to jednorazowo, Adobe Acrobat powinien być w stanie to zrobić.

r00fus
źródło
2

Podsumowując wszystkie te dobre odpowiedzi:

Na GitHub istnieje projekt bmconverter, który może konwertować różne formaty zakładek PDF. Może konwertować dane wyjściowe pdftk na format jpdftweak, chociaż jeśli użyjesz jpdftweak, nie będziesz musiał konwertować danych wyjściowych pdftk na csv, ponieważ możesz wykonywać całą pracę z poziomu jpdftweak.

Niestety znaczniki pdf nie są obsługiwane przez projekt, ale na szczęście ktoś opublikował skrypt w kwestiach bmconverter, które mogą przekonwertować wyjście pdftk na znaczniki pdf. Tak więc opcja wsadowa Ghostscript jest opcją

zetah
źródło
2

pdftkFormat zakładek jest trochę uciążliwy. Zamiast tworzę własny skrypt za pomocą bash, sed, pdftki python3. Sprawdź to w tym repozytorium: https://github.com/SiddharthPant/booky

Teraz mogę utworzyć taki plik tekstowy ( bkmrks.txt), którego napisanie zajmuje tylko 5 minut, nawet dla 1000 stron pdf.

{
  Title1, 1
  Title2, 2
  {
    Subtitle1, 3
    Subtitle2, 4
    {
      SubSubtitle1, 5
      ...
    }
  }
}

a następnie użyj mojego skryptu

./booky.sh pdf_file.pdf bkmrks.txt

to automatycznie tworzy plik pdf ( pdf_file_new.pdf) z moimi zakładkami.

Spodnie Siddharth
źródło
1

Po prostu dodaj BookmarkBeginprzed każdym wpisem zakładki, jak w

BookmarkBegin
BookmarkTitle: Front cover
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
    ⋮
tofleplof
źródło
0

Przekierowanie użyte w kroku 1 spowoduje, że update_info nie będzie działać poprawnie. Zamiast tego musisz podać plik wyjściowy do pdftk:

pdftk in.pdf dump_data output in.info

Zobacz odpowiedź na podobne pytanie: /programming//a/30308964/3158933

Pliki, które utworzyłem za pomocą przekierowania, mają nieco większy rozmiar i powodują, że pdftk wydaje komunikat „Ostrzeżenie: nieoczekiwany przypadek 1 w LoadDataFile (); kontynuacja” podczas uruchamiania polecenia update_info.

Bartymeusz
źródło