Früher hatte ich diverse Fachzeitschriften abonniert, aber das habe ich mittlerweile aufgegeben, denn da der Mensch ja bekannterweise zur Kategorie „Jäger & Sammler“ gehört bedeutet so ein Zeitschriften-Abo, dass jeden Monat ein Stapel Papier kommt, den man irgendwo archivieren „will“, denn natürlich könnte man alte Zeitschriften auch ins Altpapier geben, aber da man ja mal was dafür bezahlt hat und da vielleicht was drin ist was man irgendwann nachgucken will. Ihr seht das Problem. Mittlerweile gibt es diverse Zeitschriften im digitalen Abo.
Digitales Abo heißt, dass man üblicherweise eine PDF-Datei mit dem Zeitschrifteninhalt runterladen kann und diese dann „lesen“ kann. Ich hatte im Jahr 2018 mal so ein Probeabo für die Zeitschrift „Gitarre & Bass“ abgeschlossen, meine Frau hat unlängst auch eine ihrer Zeitschriften digital abonniert und mich dann eigentlich erst wieder auf dieses Thema gebracht.
Denn was man da runterladen kann ist groß. Zeitschriften haben viele Bilder drin und so sind die 6 Ausgaben von „Gitarre & Bass“ die ich habe zwischen 48,2 und 76,9 Megabyte groß, das was meine Frau neulich runtergeladen hat kam sogar mit über 200 Megabyte Umfang. Klar, Festplattenplatz ist nicht mehr teuer, aber die PDF-Viewer kommen teilweise schon ins Schwitzen wenn sie eine Datei in dieser Größenordnung bearbeiten sollen.
Damit war die Idee geboren, ob man diese großen PDFs nicht irgendwie aufsplitten kann um kleine leicht verdauliche Happen zu bekommen. Ja, kann man, wenn ich das manuell mache, muss ich eine Kommandozeile wie
pdfjam input.pdf 20-30 --outfile output.pdf
eintippen um die Seiten 20-30 aus der input.pdf zu extrahieren und nach output.pdf zu schreiben. Für eine Zeitschrift mit vielen Artikel ist das schon mal eine Sysiphus-Arbeit, also etwas was dringend automatisiert werden muss.
Darum habe ich mich heute mal hingesetzt und ein kleines Bash-Script gestrickt das eine Steuerdatei als Parameter übergeben bekommt die folgenden Aufbau hat:
- Erste Zeile: Dateiname der Eingabedatei, also der PDF die aufgeteilt werden soll.
- Zweite Zeile: Dateinamensanfang der Ausgabedatei, also wie die aufgesplitteten Dateien heißen sollen
- Dritte und weitere Zeilen beschreiben dann die Seitenbereiche in der Form „x-y“
Die Ausgabedateien heißen dann so wie in der zweiten Zeile angegeben, zusätzlich noch „-XXX-YYY“ was die Werte von x und y in dreistellig mit führenden Nullen repräsentiert, und am Ende natürlich die Erweiterung „.pdf“.
Beispielsweise fängt die Datei für „Gitarre & Bass“ Heft 04/2018 so an:
1 2 3 4 5 6 |
mggbd1804_gitarre_bass.pdf gb1804 3-5 8-13 14-15 16-22 |
Und daraus entstehen dann Dateien mit dem Namen „gb1804-003-005.pdf“ usw. Die lade ich mir dann in einen Ordner hier auf der Nextcloud auf dem Raspberry Pi hoch und dann kann sie sogar jeder in der Familie im Webbrowser anschauen.
Die Seitenbereiche für die Steuerdatei muss man sich noch aus dem Inhaltsverzeichnis zusammen suchen. Das ist aber normalerweise in 5 Minuten zusammengsestellt und von da an kann man die Zeitschrift sozusagen Artikel für Artikel lesen. Ohne dass der CPU-Lüfter auf Vollast läuft.
Das Script sieht so aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
filename=$1 while read line; do if [[ "$ifile" = "" ]]; then ifile=$line echo "input = $ifile" continue fi if [[ "$ofile" = "" ]]; then ofile=$(echo $line | sed -E "s/(.*)\.pdf/\1/") echo "output = $ofile" continue fi echo "line = $line" start=$(echo $line | sed -E "s/([[:digit:]]*)-.*/\1/") end=$(echo $line | sed -E "s/([0-9]*)-([0-9*])/\2/") numstart=$(printf "%03d" $start) numend=$(printf "%03d" $end) range="$numstart-$numend" realout="$ofile-$range.pdf" pages="$start-$end" pdfjam $ifile $pages --outfile $realout done < "$filename" |
Quick & dirty runterprogrammiert, aber es tut was es soll.
Danke, eine super Idee!