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?


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/


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


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ć


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

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


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ą


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.


1

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

BookmarkBegin
BookmarkTitle: Front cover
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
    ⋮

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.

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.