Pobierając metadane z niektórych plików pdf z zakładkami pdftk
, obserwuję format zakładek w metadanych pdf. Zgaduję, że za pomocą pdftk
można dodawać i edytować zakładki pliku pdf.
Oto trzy kroki, które wykonuję:
- Najpierw otrzymuję metadane (w tym ewentualne zakładki) z pliku pdf do pliku tekstowego przez
pdftk in.pdf dump_data > in.info
. Następnie dodaję zakładki do pliku tekstowego metadanych
in.info
, zmieniając go zInfoKey: 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
- 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.pdf
w czytniku evince lub Adobe, w nowym pliku pdf nie ma zakładki.
Jeśli dostanę metadane z nowego pliku pdf out.pdf
przez 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?
Odpowiedzi:
Wygląda mi na to, że od wersji 1.45 (2012-12-06) pdftk pozwala modyfikować zakładki za pomocą polecenia update_info:
przez: http://www.pdflabs.com/docs/pdftk-version-history/
źródło
BookmarkBegin
tagami przed brakiem każdego wpisu zakładki.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
źródło
Jeśli nadal trzymasz się tych skryptów uniksowych, to
pdftk
gs
jest akceptowane.gs
skryptu, aby połączyć je ze znakami pdfSpójrz na http://blog.tremily.us/posts/PDF_bookmarks_with_Ghostscript/ skrypt
pdf-merge.py
robi 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
W każdym razie powinno działać
źródło
pdftk jest zdecydowanie właściwym narzędziem (z odpowiednią składnią):
źródło
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ć.
źródło
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ą
źródło
pdftk
Format zakładek jest trochę uciążliwy. Zamiast tworzę własny skrypt za pomocąbash
,sed
,pdftk
ipython3
. Sprawdź to w tym repozytorium: https://github.com/SiddharthPant/bookyTeraz mogę utworzyć taki plik tekstowy (
bkmrks.txt
), którego napisanie zajmuje tylko 5 minut, nawet dla 1000 stron pdf.a następnie użyj mojego skryptu
to automatycznie tworzy plik pdf (
pdf_file_new.pdf
) z moimi zakładkami.źródło
Po prostu dodaj
BookmarkBegin
przed każdym wpisem zakładki, jak wźródło
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:
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.
źródło