
Hintergrund
Mit LaTeX ein Buch schreiben. Wenn ein Benutzer das Buch kauft, wird das PDF automatisch generiert.
Problem
Das PDF sollte ein Wasserzeichen haben, das den Namen und die Kontaktinformationen der Person enthält.
Frage
Welche Software erfüllt folgende Kriterien:
- Wendet verschlüsselte, unsichtbare Wasserzeichen auf ein PDF an
- Open Source
- Plattformunabhängig (Linux, Windows)
- Schnell (markiert ein 200-seitiges PDF in weniger als 1 Sekunde)
- Stapelverarbeitung (ausschließlich befehlszeilengesteuert)
- Resistent gegen Kollusionsangriffe
- Nicht zerbrechlich (z. B. PDF -> EPS -> PDF enthält noch das Wasserzeichen)
- Gut dokumentiert (zeigt Anwendungsbeispiele)
Ideen & Ressourcen
Einige Gedanken und Erkenntnisse:
- Wasserzeichen aus der Verarbeitung natürlicher Sprache (NLP).
- Wenden Sie Steganografie auf ein zufällig ausgewähltes Bild an.
- http://openstego.sourceforge.net/cmdline.html
Das Problem bei NLP besteht darin, dass Grammatikfehler auftreten können. Das Problem bei der Steganografie besteht darin, dass die Bilder aus einem Bildcache stammen. Wenn dieser Cache mit Wasserzeichenbildern neu erstellt wird, kommt es daher zu einer Verzögerung bei der PDF-Erstellung (ich könnte einfach ein Bild aus dem Cache löschen, aber das ist keine elegante Lösung).
Danke schön!
Antwort1
Ich habe vor ein paar Jahren etwas Ähnliches gemacht. Es erfüllte nicht alle Ihre „harten“ Kriterien. Es funktionierte folgendermaßen:
Ich habe einen kaum erkennbaren, 2x2 Punkt großen „klickbaren“ Bereich an einer beliebigen Stelle am Rand einer beliebigen PDF-Seite platziert. Es ist nicht sehr wahrscheinlich, dass dieser Bereich zufällig entdeckt wird (neben den vielen anderen offensichtlichen klickbaren Hotspots, die sich ohnehin im PDF befanden...).
Wenn Sie auf den Link klicken, gelangen Sie auf eine Webseite
http://my.own.site/project/87245e386722ad77b4212dbec4f0e912
mit einigen erfundenen „Errata“-Aufzählungspunkten. (Habe ich erwähnt, dass es sich dabei87245e386722ad77b4212dbec4f0e912
um den MD5-Hash des Namens der Person + der Kontaktdaten handelte, die ich in einer DB-Tabelle gespeichert hatte? :-)
Dies schützt natürlich nicht vor Drucken+Scannen+OCR oder vor einem PDF-„Refrying“-Zyklus. Außerdem beruht es auf einem gewissen Grad an „Sicherheit durch Verschleierung“.
So fügen Sie mit Ghostscript einen solchen anklickbaren Hotspot in die untere linke Ecke von Seite 1 von random-in.pdf ein:
gs \
-o random-out.pdf \
-sDEVICE=pdfwrite \
-dPDFSETTINGS=/prepress \
-c "[ /Rect [1 1 3 3]" \
-c " /Color [1 1 1]" \
-c " /Page 1" \
-c " /Action <</Subtype /URI" \
-c " /URI (http://my.own.site/87245e386722ad77b4212dbec4f0e912)>>" \
-c " /Subtype /Link" \
-c " /ANN pdfmark" \
-f random-in.pdf
Um den anklickbaren Bereich größer und sichtbarer zu machen, ändern Sie die obigen Befehlszeilenparameter wie folgt:
[....]
-c "[/Rect [1 1 50 50]" \
-c " /Color [1 0 0]" \
[....]
Noch einfacher wäre es, einen MD5-Hash des PDFs zu generieren und in Ihrer Datenbank zu speichern. Dieser ist für jedes erstellte PDF eindeutig, da in den Metadaten die UUID des Dokuments sowie das Erstellungs- und Änderungsdatum enthalten sind. Natürlich können damit auch nur die Original-PDFs in ihrer digitalen Form verfolgt werden ...
Antwort2
Das ist eine sehr schwierige Frage und ich bin nicht sicher, ob damit alle Ihre Fragen beantwortet werden.
Ich bin mir nicht sicher, ob es eine Komplettlösung gibt, die das oder die Zufallsauswahl kann.
Wenn ich jedoch damit beauftragt würde, wäre meiner Meinung nach der einfachste Weg, das Dokument in einem Zwischenformat wie formatiertem HTML oder Ähnlichem zu speichern.
Mithilfe einer CSS-Druckdatei oder Ähnlichem können Sie das Layout mit dem des Buches identisch machen und mithilfe eines Skripts Bilder, Inhalte usw. zufällig anordnen sowie mithilfe einer serverseitigen PDF-Komponente das Dokument wieder zusammensetzen.
Wenn also beispielsweise jemand das Dokument kauft, kann Ihr Kaufskript nach dem Zufallsprinzip eine Nummer auswählen, die einen Schutzmechanismus identifiziert (z. B. erstes Bild, zweites Bild, Text irgendwo usw.) und dann einen eindeutigen Download-Link generieren.
Wenn dieser Download-Link aufgerufen wird, überprüft er die Nummer, führt den Vorgang aus, kompiliert das Dokument in eine PDF-Datei und lädt es anschließend auf den Client herunter.
Ich weiß, dass es nicht einfach/unkompliziert sein wird, aber Sie verlangen nichts Einfaches und dies ist der beste Weg, der mir einfällt.