Einführung
Viele von euch, die regelmässig passwortgeschützte PDFs erhalten, z.B. Lohnabrechnungen, kennen das Problem: Möchte man das passwortgeschützte PDF so archivieren? Was macht man mit dem Passwort, damit das Dokument in Zukunft weiterhin geöffnet werden kann? Beim eventuellen Weiterversand das Passwort gleich mit angeben?
Solange das Dokument an einem sicheren Ort archiviert werden kann, ist es besser, den Schutz vom Dokument gleich zu entfernen. Unter Windows mit Acrobat oder PDF24 ist das schon lästig genug, wenn man es jedes Mal wiederholen muss. Unter Linux ist mir auch kein grafisches Tool bekannt, welches das kann. Online-Tools zur Bearbeitung von persönlichen Dokumenten verwenden? Sicher nicht.
Für diese Aufgabe habe ich ein einfaches (und vermutlich schlechtes) Script geschrieben, welches alle passwortgeschützten PDFs (mit statischem Passwort) im selben Ordner entschlüsselt und dann in einem Unterordner bereitstellt. Bei Bedarf lässt sich das ganze auch per Cron oder Task auf dem NAS automatisieren, Voraussetzung ist eine lauffähige Version von qpdf.
Installation
Unter Ubuntu reicht für die Installation
sudo apt install qpdf
Das unten stehende Script wird idealerweise als decrypt_all_pdfs.sh
abgespeichert und mit chmod +x decrypt_all_pdfs.sh
ausführbar gemacht. Das Script wird im selben Ordner wie die zu entschlüsselnden PDFs platziert. Ein Unterordner für die entschlüsselten PDFs muss existieren, die Variabeln für das Passwort und vom Unterordner müssen definiert sein.
#!/bin/bash #dav1.ch, 2024 #Passwort für geschütztes PDF pass="M31NP@$$W0RT" #Vorhandenen Unterordner für die entsperrten PDFs angeben subf="entsperrt" #Optional: Suffix für entsperrte PDFs angeben, z.B. "_entsperrt" suff="" shopt -s nullglob if [ ! -d "$subf" ]; then echo "ERROR : Ordner \"$subf\" existiert nicht"; exit; fi for p in *.pdf; do path=$subf/"$(basename -s .pdf "$p")"$suff.pdf; if [ ! -f "$path" ]; then qpdf --password=$pass --decrypt "$p" "$path" 2> /dev/null; exco="$?"; if [ $exco == 0 ]; then echo "OK : $path"; elif [ $exco == 2 ]; then echo "ERROR : Falsches oder gar kein Passwort gesetzt für $p"; else echo "ERROR : Sonstiger Fehler" fi else echo "SKIP : $p"; fi done
Der wichtige Teil im Script ist die Ausführung von qpdf:
qpdf --password=PASSWORT --decrypt PDF_IN PDF_OUT
Ausführung
Wenn alles passt, sieht es dann so aus:

Es wird nicht viel abgefangen, nur das Vorhandensein vom Unterordner, Korrektheit vom Passwort und ob die Zieldatei nicht schon existiert. So ist es mindestens möglich, das Script regelmässig laufen zu lassen, ohne dass die bereits entschlüsselten wieder Dateien überschrieben werden.