
Ich habe mehrere PDF-Dateien ( chapter1.pdf
, chapter2.pdf
usw.), von denen jede ein Kapitel eines Buches ist. Ich weiß jetzt, wie ich sie zu einer einzigen PDF-Datei zusammenfüge (ich verwende den Befehl pdfunite
von Poppler), aber da die Ausgabedatei groß ist, ist es schwierig, ein Kapitel zu finden, ohne es in einem Inhaltsverzeichnis zu indizieren. Wie erstelle ich also ein eingebettetes Inhaltsverzeichnis, in dem jedes zusammengeführte Kapitel ein Eintrag ist?
Beachten Sie, dass ich in der Ausgabedatei keine Seite erstellen möchte, die die Liste der Kapitel und ihre jeweiligen Seitenzahlen enthält. Ich möchte die Index-/Inhaltsverzeichnis-Metadaten einer PDF-Datei, die in jedem PDF-Reader (oder E-Book-Gerät) durchsucht werden können, der diese Funktion unterstützt.
Antwort1
ZerstörungsfreiVersion der Antwort von @bu5hman:
#!/bin/bash
out_file="combined.pdf"
bookmarks_file="/tmp/bookmarks.txt"
bookmarks_fmt="BookmarkBegin
BookmarkTitle: %s
BookmarkLevel: 1
BookmarkPageNumber: %d
"
rm -f "$bookmarks_file" "$out_file"
declare -a files=(*.pdf)
page_counter=1
# Generate bookmarks file.
for f in "${files[@]}"; do
title="${f%.*}"
printf "$bookmarks_fmt" "$title" "$page_counter" >> "$bookmarks_file"
num_pages="$(pdftk "$f" dump_data | grep NumberOfPages | awk '{print $2}')"
page_counter=$((page_counter + num_pages))
done
# Combine PDFs and embed the generated bookmarks file.
pdftk "${files[@]}" cat output - | \
pdftk - update_info "$bookmarks_file" output "$out_file"
Es funktioniert durch:
- Erstellen
bookmarks.txt
. - Zusammenführen von PDFs in
combined.pdf
. - Aktualisierung
combined.pdf
mitbookmarks.txt
.
Antwort2
Eine Funktion, die ich ständig verwende, um genau dies zu tun. Stellen Sie einfach sicher, dass die PDFs bei der Erweiterung in der richtigen Reihenfolge sortiert werden.
tp="/tmp/tmp.pdf"
td="/tmp/data"
for i in *.pdf; do
echo "Bookmarking $i"
printf "BookmarkBegin\nBookmarkTitle: %s\nBookmarkLevel: 1\nBookmarkPageNumber: 1\n" "${i%.*}"> "$td"
pdftk "$i" update_info "$td" output "$tp"
mv "$tp" "$i"
done
pdftk *.pdf cat output myBook.pdf