Das fertige Skript sieht nun wie folgt aus.
Es sucht sämtliche PDFs in den Unterordnern und fasst sie sortiert zu einem großen Dokument zusammen. Außerdem - und das ist der eigentliche Clou - werden Lesezeichen für jedes Dokument und jeden Unterordner angelegt. Bei meinem Projekt sind es mittlerweile über 300 Dokumente (Mathe-Trainingsbögen) - somit hilft die Baumansicht in dem einklappbaren Lesezeichenverzeichnis unglaublich gut die Übersicht zu bewahren.
Ich muss ergänzen, dass der Algorithmus für das Anfertigen der Lesezeichen hier nicht universell, sondern auf das mir vorliegendene Projekt zugeschnitten ist (ausschließlich einseitige PDFs, ausschließlich Unterordner in drei Ebenen). Aber vielleicht dient das Skript dennoch dem einen oder anderen als Inspiration. Falls wirklich jemand Interesse hat, es für sein Projekt umzuschreiben, helfe ich gerne - so weit ich kann - weiter.
Viele Grüße und an bluelupo und hendrikL nochmals danke für die Hilfe! :-)
Hans
#!/bin/bash
### SCHRITT 1: Alle PDFs in den Unterverzeichnissen zu einer PDF mergen -> Dump_Output.pdf
#Ausgabe
echo -n "1. PDFs suchen und zusammenfassen... "
find . | grep pdf | grep -v "xoj" | sed 's/ /\\ /g' | sort > Dump_AllePDFs.txt
while read line
do
AllePDFsAlsArray+=("$line")
done < Dump_AllePDFs.txt
pdftk "${AllePDFsAlsArray[@]}" cat output Dump_Output.pdf
#Ausgabe
echo "fertig"
### SCHRITT 2: Eine Liste in txt-Form für die Lesezeichen erstellen -> Dump_ListeFuerLesezeichen.txt
#Ausgabe
echo -n "2. Liste für die Lesezeichen erstellen... "
find . | grep pdf | grep -v "xoj" | grep -v "Dump_Output" | sed 's/\.pdf//g' | sed 's/\.//g' | sort | tr "/" "\n" > Dump_ListeFuerLesezeichen.txt
#Ausgabe
echo "fertig"
### SCHRITT 3: Lesezeichen in dem PDF erstellen und eigentliches Output-File erstellen -> Mathe-Training-Komplett
#Ausgabe
echo -n "3. Metadatei für die Lesezeichen erstellen... "
Page=0
Level=1
BookmarkYesNo=No
OrdnerNameAltLevel1=A
OrdnerNameAltLevel2=B
OrdnerNameAltLevel3=C
i=0
pdftk Dump_Output.pdf dump_data > Dump_MetadateiFuerDiePDF.txt #Zunächst die Metadatei aus dem Output-PDF entnehmen, dann mit folgender Schleife mit den Lesezeichen ergänzen:
while read line
do
BookmarkYesNo=No #Grundsätzlich erst mal pro Schleife davon ausgehen, dass ein Lesezeichen gesetzt wird.
if [ "$line" = '' ] #Falls die aktuelle Zeile nur ein Punkt ist. Komischerweise muss hier in die Anführungszeichen genau nichts...
then
Page=$[$Page +1]
Level=0
fi
Level=$[$Level +1]
if [ $((Level%5)) == 2 -a "$line" != "$OrdnerNameAltLevel1" ] #In diesem Komplex wird entschieden, ob ein Lesezeichen gesetzt wird, oder nicht. Das %5 bedeutet modulo5, also der Rest nach der Division durch 5. Bei einem Rest von 2 ist man im Level 1, Rest 3 -> Level 2, usw. Anschließend wird die aktuelle Zeile in OrdnerNameAlt abgelegt, damit im nächsten Schritt erneut mit der vorigen Ebene verglichen werden kann.
then
BookmarkYesNo=Yes
OrdnerNameAltLevel1=$line
elif [ $((Level%5)) == 3 -a "$line" != "$OrdnerNameAltLevel2" ]
then
BookmarkYesNo=Yes
OrdnerNameAltLevel2=$line
elif [ $((Level%5)) == 4 -a "$line" != "$OrdnerNameAltLevel3" ]
then
BookmarkYesNo=Yes
OrdnerNameAltLevel3=$line
elif [ $((Level%5)) == 0 ]
then
BookmarkYesNo=Yes
fi
if [ "$BookmarkYesNo" = "Yes" ];
then
echo "BookmarkBegin" >> Dump_MetadateiFuerDiePDF.txt
echo "BookmarkTitle: $line" >> Dump_MetadateiFuerDiePDF.txt
BookmarkLevel=$[$Level -1]
echo "BookmarkLevel: $BookmarkLevel" >> Dump_MetadateiFuerDiePDF.txt
echo "BookmarkPageNumber: $Page" >> Dump_MetadateiFuerDiePDF.txt
fi
done < ./Dump_ListeFuerLesezeichen.txt
#Ausgabe
echo "fertig"
#Ausgabe
echo -n "4. Zusammengefasste PDF-Datei mit Lesezeichen erstellen... "
Datum=`date +%Y-%m-%d`
pdftk Dump_Output.pdf update_info Dump_MetadateiFuerDiePDF.txt output Mathe-Training-komplett-V$Datum.pdf #Jetzt die Metadatei wieder einlesen
#Ausgabe
echo "fertig"
### SCHRITT 4: Alle Dump-Dateien wieder löschen
#Ausgabe
echo -n "5. Alle Dump-Dateien wieder löschen... "
rm Dump_AllePDFs.txt Dump_ListeFuerLesezeichen.txt Dump_MetadateiFuerDiePDF.txt Dump_Output.pdf
#Ausgabe
echo "fertig"