PDF-Wasserzeichen mit Ghostscript automatisieren
Ghostscript ist ein leistungsstarkes Open-Source-Werkzeug zur PDF-Bearbeitung und bietet robuste Funktionen für Wasserzeichen, Kompression und Dokumentenverarbeitung. Dieser Leitfaden zeigt, wie Sie mit Ghostscript auf jeder Seite ein sichtbares Textwasserzeichen hinzufügen und anschließend optional die Bildauflösung für eine kleinere Ausgabe reduzieren. Arbeiten Sie mit Kopien: Das Neuschreiben von PDFs kann Formulare, Anmerkungen, Farben und Signaturen verändern.
Ghostscript installieren und konfigurieren
Installieren Sie ein unterstütztes Ghostscript-Paket mit aktuellen Sicherheitspatches. Auf Ubuntu und Debian-basierten Systemen:
sudo apt-get update
sudo apt-get install ghostscript
Für macOS-Nutzer mit Homebrew:
brew install ghostscript
Überprüfen Sie Installation und Version:
gs --version
Ein Wasserzeichen mit einer EndPage-Prozedur erstellen
Ghostscript kann nach dem Zeichnen jeder PDF-Seite eine PostScript-Prozedur namens
EndPage ausführen. Anders als eine eigenständige Anmerkung oder ein Befehl,
der nach dem PDF ausgeführt wird, zeichnet dies den Text auf jede ausgegebene Seite. Erstellen Sie
in Ihrem Arbeitsverzeichnis die Datei watermark.ps:
%!PS-Adobe-3.0
<< /EndPage {
2 eq {
pop false
} {
pop
gsave
initgraphics
4 dict begin
/size currentpagedevice /PageSize get def
/label (CONFIDENTIAL) def
size 0 get 2 div size 1 get 2 div translate
/Helvetica-Bold findfont 36 scalefont setfont
/side size aload pop 2 copy gt { exch } if pop def
/factor side 0.8 mul label stringwidth pop div def
factor 1 lt { factor dup scale } if
45 rotate
0.75 setgray
label dup stringwidth pop -2 div 0 moveto show
end
grestore
true
} ifelse
} >> setpagedevice
Das Zurücksetzen des Grafikzustands hält die Platzierung unabhängig von der Seitenrotation des PDFs. Auf schmalen Seiten wird der Text verkleinert, damit das vollständige Wasserzeichen innerhalb der Seite bleibt.
Wasserzeichen sicher anwenden
Führen Sie dies in einem Verzeichnis ohne vorhandene Datei watermarked.pdf aus.
Laden Sie die Prozedur vor dem Eingabe-PDF. Wenn Sie Überschreibungen der Papiergröße
weglassen, bleiben die Seitenmaße der Eingabe erhalten:
gs -dSAFER \
-dBATCH \
-dNOPAUSE \
-sDEVICE=pdfwrite \
-dCompatibilityLevel=1.7 \
-dPDFSETTINGS=/prepress \
-sOutputFile=watermarked.pdf \
-f watermark.ps input.pdf
PDF-Kompression optimieren
Ghostscript bietet Voreinstellungen, die Bildqualität gegen Dateigröße eintauschen. Das Ergebnis ist nicht garantiert kleiner, und dieser separate Befehl fügt kein Wasserzeichen hinzu:
gs -dSAFER \
-dBATCH \
-dNOPAUSE \
-sDEVICE=pdfwrite \
-dCompatibilityLevel=1.7 \
-dPDFSETTINGS=/ebook \
-sOutputFile=compressed.pdf \
input.pdf
Verfügbare Optionen für -dPDFSETTINGS:
/screen: Ausgabe mit niedriger Auflösung, mit einem Downsampling-Ziel von 72 dpi für Farbe/Graustufen./ebook: Ausgabe mit mittlerer Auflösung, mit einem Downsampling-Ziel von 150 dpi für Farbe/Graustufen./printer: druckorientierte Ausgabe, mit einem Downsampling-Ziel von 300 dpi für Farbe/Graustufen./prepress: auf die Druckvorstufe ausgerichtete Einstellungen; keine Garantie, dass jeder Farbwert unverändert bleibt./default: Ausgabe für allgemeine Zwecke, keine Zusicherung, dass jede ursprüngliche Einstellung erhalten bleibt.
Die vollständigen Werte der einzelnen Voreinstellungen finden Sie in der Dokumentation zur PDF-Ausgabe von Ghostscript. Prüfen Sie die Ausgabe visuell, bevor Sie ein Quelldokument ersetzen.
Erweitertes Automatisierungsskript
Speichern Sie dies als process.sh neben watermark.ps und
führen Sie anschließend bash process.sh input.pdf new-results aus. Das Ausgabeverzeichnis darf noch nicht
vorhanden sein. Eine fehlgeschlagene Phase entfernt nur die Ausgabe dieses Aufrufs; das
ursprüngliche PDF und vorhandene Ergebnisverzeichnisse bleiben unberührt.
#!/bin/bash
set -euo pipefail
if [ "$#" -ne 2 ]; then
echo "Usage: $0 <input-pdf> <new-output-directory>" >&2
exit 1
fi
INPUT_FILE=$1
OUTPUT_DIR=$2
WATERMARK_FILE=$PWD/watermark.ps
STAMPED_FILE=stamped.pdf
COMPRESSED_FILE=compressed.pdf
[[ $INPUT_FILE = /* ]] || INPUT_FILE=$PWD/$INPUT_FILE
[[ $OUTPUT_DIR = /* ]] || OUTPUT_DIR=$PWD/$OUTPUT_DIR
if [ ! -f "$INPUT_FILE" ]; then
echo "Error: Input PDF not found" >&2
exit 1
fi
if [ ! -f "$WATERMARK_FILE" ]; then
echo "Error: watermark.ps not found in the working directory" >&2
exit 1
fi
if ! mkdir -m 700 -- "$OUTPUT_DIR"; then
echo "Error: Use a new output directory" >&2
exit 1
fi
cleanup() {
local status=$?
if [ "$status" -ne 0 ]; then
rm -f -- "$OUTPUT_DIR/$STAMPED_FILE" "$OUTPUT_DIR/$COMPRESSED_FILE"
rmdir -- "$OUTPUT_DIR"
fi
}
trap cleanup EXIT
cd -P -- "$OUTPUT_DIR"
OUTPUT_DIR=$PWD
process_pdf() {
local output=$1
local settings=$2
shift 2
if ! gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite \
-dCompatibilityLevel=1.7 -dPDFSETTINGS="$settings" \
-sOutputFile="$output" -f "$@"; then
echo "Error: PDF processing failed" >&2
exit 1
fi
}
echo "Adding watermark..."
process_pdf "$STAMPED_FILE" /prepress "$WATERMARK_FILE" "$INPUT_FILE"
echo "Optimizing file size..."
process_pdf "$COMPRESSED_FILE" /ebook "$OUTPUT_DIR/$STAMPED_FILE"
echo "Processing complete: $OUTPUT_DIR/$COMPRESSED_FILE"
Sicherheitsüberlegungen
Bei der Verarbeitung von PDFs mit Ghostscript:
- Lassen Sie
-dSAFERaktiviert; die Option schränkt den Dateizugriff ein, ist aber keine vollständige Sandbox. - Überprüfen Sie Eingabedateien vor der Verarbeitung
- Verwenden Sie geeignete Dateiberechtigungen für Ausgabedateien
- Halten Sie Ghostscript auf der neuesten Version, um Sicherheitspatches zu erhalten
- Prüfen Sie nach der Verarbeitung Seitenzahl, Seitenmaße, das sichtbare Wasserzeichen und den gerenderten Inhalt.
Verarbeiten Sie nicht vertrauenswürdige Dokumente unter einem eingeschränkten Betriebssystemkonto
oder in einem isolierten Container mit Zeit- und Speicherlimits. Behandeln Sie die Datei
watermark.ps als ausführbaren Code: Stellen Sie sicher, dass sie vertrauenswürdig
bleibt, und fügen Sie keine unmaskierten Benutzereingaben ein. Ein sichtbares Wasserzeichen
verschlüsselt ein Dokument nicht und verhindert kein Kopieren.
Versionskompatibilität
Verwenden Sie eine gepflegte Ghostscript-Version und prüfen Sie die installierte Version. Wichtige Hinweise zur Kompatibilität:
- PDF-Kompatibilitätsstufe
1.7wird für moderne Workflows empfohlen - Vorhandene digitale Signaturen werden ungültig, wenn das PDF neu geschrieben wird.
- Legacy-PostScript-Workflows werden weiterhin unterstützt, können aber Anpassungen erfordern
Fazit
Ghostscript kann jede PDF-Seite stempeln und in einem wiederholbaren Workflow eine Voreinstellung für die Kompression anwenden. Bewahren Sie die Eingabe, lassen Sie Fehler sichtbar werden, wenn eine der beiden Phasen fehlschlägt, und prüfen Sie das Ergebnis, bevor Sie es veröffentlichen.
Für automatisierte Dokumentenverarbeitung im großen Maßstab lohnt sich ein Blick auf die Services zur Dokumentenverarbeitung von Transloadit, die PDF-Vorgänge sicher und effizient in der Cloud abwickeln.
