Wie kann ich Textinhalte in einer PDF-Datei programmgesteuert ändern / schützen, damit sie nicht mehr kopiert werden können?

7

Ich möchte das Gegenteil von OCR machen, ich möchte keine Bilder in Text umwandeln, ich möchte den gesamten Text in einer PDF in ein Bild umwandeln, damit er nicht zufällig ausgewählt und kopiert werden kann.

In Acrobat Pro ist alles in Ordnung, aber ich hätte wirklich gerne etwas, das ich über eine Linux-Befehlszeile verwenden kann, da ich eine Menge dieser PDFs zu tun habe und sie sich derzeit auf einer Website befinden. Wenn ich diese Änderung auf dem Server vornehmen könnte, würde ich stundenlanges Herunterladen, Verarbeiten in Acrobat und erneutes Hochladen sparen, was über die sehr langsame CMS-Oberfläche erfolgen muss.

Wenn es also ein PDF-Tool gibt, das dies problemlos erledigt, kann ich es vom Terminal aus verwenden, das wäre fantastisch.

UserZer0
quelle
7
Meine Reaktion ist, dass Sie das nicht tun sollten. Es schadet allen Arten von normalerweise wünschenswerten Anwendungsfällen (z. B. Bildschirmleseprogrammen). Es kann dazu führen, dass die PDF-Datei auch unter idealen Bedingungen hässlich aussieht (da das Bitmap-Bild nicht so scharf wie Schriftarten auf den Bildschirm skaliert werden kann) und Es kann im Grunde genommen nichts bewirken - eine entschlossene Person macht Screenshots, nimmt eine erneute Texterkennung vor oder gibt sie erneut ein, wenn es für sie wichtig genug ist. Warum denkst du, musst du das tun?
7.

Antworten:

7

Ich nehme an, Ihr Ziel ist es , die Auswahl und das Kopieren von Text aus einer PDF-Datei zu erschweren . Denn das ist das einzig erreichbare Ziel, das Sie aufstellen können. (Wenn es eine Möglichkeit gibt, die PDF-Seiten auf dem Bildschirm anzuzeigen, gibt es eine Möglichkeit, irgendwie auf den Text- oder Bildinhalt zuzugreifen, auch wenn dies schwieriger ist als nur das Kopieren und Einfügen bewusst, dass.)

Sie haben drei Möglichkeiten:

  1. Konvertieren Sie Ihre PDF-Seiten in ganzseitige Pixelbilder und verpacken Sie diese Bilder erneut in ein mehrseitiges PDF.
  2. Konvertieren Sie die Glyphen aller eingebetteten Schriftarten in Vektorumrisse .
  3. "Verschlüsseln" Sie Ihr PDF mit einem Benutzerpasswort .

Jede dieser drei Methoden ist mit dem richtigen Werkzeug sehr einfach anzuwenden. :-)

Für jede dieser Methoden können Sie ein Tool für freie und Open Source-Software in der Befehlszeile verwenden. (Jedes dieser Tools ist für Linux, Mac OSX, Unix oder Windows verfügbar.)

Weitere Informationen zu den einzelnen Methoden finden Sie weiter unten.

1. Erstellen Sie ganzseitige Pixelbilder (mit ImageMagick convert)

Sie können mit ImageMagick ‚s convertBefehl einfach wie folgt aus :

 convert              \
   pdf-with-fonts.pdf \
   pdf-with-images.pdf

ImageMagick kann direkt nur mit Rasterbildern arbeiten , nicht mit einem anderen Format. Da PDFs nicht direkt verarbeitet werden können, wird Ghostscript automatisch als Stellvertreter verwendet . Daher muss auch Ghostscript installiert sein! Ghostscript erstellt die Rasterbilder, die von ImageMagick als Eingabe benötigt werden.

Sie können den Prozess von ImageMagick beobachten, indem Sie Ghostscript als Hintergrundprozess verwenden, indem Sie -verboseIhrer Befehlszeile einen Schalter hinzufügen .

Standardmäßig convertwird eine Auflösung von 72ppi verwendet. Dies ist möglicherweise nicht gut genug zum Lesen (aber es wird viel schwieriger sein, Ihren "Schutz" durch Anwenden von OCR-Software auf die Ausgabe zu umgehen .)

Pixelisierte PDF-Seite mit 72 PPI bei 600% Zoom

Das obige Bild zeigt einen Screenshot einer pixeligen PDF-Seite, die mit der von ImageMagick bei einer Zoomstufe von 600% verwendeten Standardauflösung (72 PPI) erstellt wurde. Wenn Sie eine bessere Auflösung benötigen, z. B. 200 PPI, fügen Sie den -density 200Parameter in die Befehlszeile ein:

 convert              \
  -density 200        \
   pdf-with-fonts.pdf \
   pdf-with-images.pdf

Pixelisierte PDF-Seite mit 200 PPI bei 600% Zoom

Das obige Bild zeigt die Aufnahme (ebenfalls bei einer Zoomstufe von 600%) einer pixeligen PDF-Seite, die von ImageMagick mit einer höheren Auflösung von 200 PPI erstellt wurde.

Beachten Sie, dass beim Testen des obigen Befehls mit der Standardauflösung von 72 PPI eine 219-seitige PDF-Datei mit dem gesamten Text und einer Größe von 1 MByte eine Ausgabedatei von 23 MByte ergab. Die Generierung auf einem MacBook dauerte ca. 2 Minuten. Das 200ppi PDF hat 110 MByte ergeben und es hat 11 Minuten gedauert, bis es fertig ist ...

Umgehen?

Es ist einfach, die Pixelung von Seiten zu umgehen, wenn die Auflösung gut genug ist: OCR funktioniert einwandfrei. Mit einer geringen Auflösung ist es für den Menschen möglicherweise noch lesbar (und erratbar), für Maschinen jedoch schwierig, gute OCR-Ergebnisse zu erzielen.

2. Alle Glyphen in Vektorumrisse konvertieren (mit Ghostscript)

Sie können die neueste und neueste Version von Ghostscript verwenden. Das ist Version 9.15 . Überprüfen Sie Ihre installierte Version mit gs -version.

Die neueste Version 9.15 enthält einen neuen Befehlszeilenparameter --dNoOutputFonts. Dieser Parameter konvertiert alle Glyphenformen in Konturen und entfernt alle eingebetteten Schriftarten:

gs                        \
 -o pdf-with-outlines.pdf \
 -sDEVICE=pdfwrite        \
  pdf-with-fonts.pdf

In meinem Test wurde dieselbe 219-seitige PDF-Datei (mit einer Größe von 1 MByte) in eine Ausgabedatei von 186 MByte konvertiert, wobei die Konvertierung 6 Minuten in Anspruch nahm.

Der Vorteil von Konturen besteht darin, dass der Text der Seite klar und scharf bleibt und keine Pixel aufweist. Sie können den Text auf jeder Ebene vergrößern, ohne an Schärfe zu verlieren. Das sehen Sie im nächsten Screenshot:

Vektorisierter Text auf PDF-Seite bei 600% Zoom

Der Nachteil ist die Dateigröße. (Übrigens habe ich die gleiche Methode zum Konvertieren von Text in Konturen mit Adobe Acrobat Pro XI getestet. Die resultierende Dateigröße betrug 61 MByte und dauerte 15 Minuten.)

Umgehen?

Diese Maßnahme lässt sich leicht umgehen: OCR funktioniert einwandfrei.

3. Schützen Sie PDF, indem Sie es "verschlüsseln" (Using qpdf)

Was nicht so gut bekannt ist, ist, dass Sie ein PDF mit leeren Passwörtern (den Passwörtern "Benutzer" und "Eigentümer") "schützen" oder "verschlüsseln" können . Auf diese Weise kann jede PDF Reader / Viewer-Software die Datei öffnen, ohne nach einem Kennwort zu fragen. Das Kennwortdialogfeld wird nur angezeigt, wenn Sie versuchen, Text von einer Seite zu kopieren oder die Datei zu drucken.

QPDF hat dafür eine recht gute Unterstützung:

qpdf                    \
  --encrypt  ""  ""  40 \
  --print=n             \
  --modify=n            \
  --extract=n           \
  --                    \
    uncrypted.pdf       \
    crypted.pdf

Was bedeuten all diese Befehlsoptionen?

  • --encrypt "" "" 40:
       Dies setzt sowohl die Passwörter (Benutzer und Besitzer) auf die leere Zeichenkette als auch die Schlüssellänge auf 40 Bit.

  • --print=n:
       Deaktiviert das Drucken der PDF-Datei.

  • --modify=n:
       Deaktiviert die Änderung der PDF-Datei.

  • --extract=n:
       Deaktiviert die Text- und Bildextraktion der PDF-Datei.

  • --:
       Dies ist erforderlich, um das Ende der Verschlüsselungsoptionen anzuzeigen.

Wenn Sie eine 128- oder 256-Bit-Schlüssellänge verwenden, stehen in QPDF detailliertere (und andere) Optionen zur Verfügung. Zu den weiteren verfügbaren Optionen gehören --modify=[annotate|form|assembly]das Ausfüllen von Formularen, das Hinzufügen von Anmerkungen oder das Zusammenfügen des Dokuments mit anderen PDF-Dateien (wobei Copy'n'Paste oder Drucken weiterhin verboten sind).

Dieser Befehl

 qpdf --show-encryption crypt.pdf 

Zeigt die Details zu den Verschlüsselungseinstellungen einer Datei an. Beispiel:

 extract for accessibility: not allowed
 extract for any purpose: not allowed
 print low resolution: not allowed
 print high resolution: not allowed
 modify document assembly: not allowed
 modify forms: allowed
 modify annotations: allowed
 modify other: not allowed
 modify anything: not allowed

"Geschütztes" PDF mit einem ausgewählten Wort.  Unten links: Kopieren verhindert.  Unten rechts: Drucken verhindert.

Übrigens: Wenn Sie das Kennwort in den beiden oben gezeigten Dialogfeldern leer lassen, kann dies bei (den meisten? Oder allen? Nicht getesteten ...) PDF-Viewern nicht hilfreich sein. Es kann immer noch nicht zum Kopieren oder Drucken entsperrt werden.

Der Vorteil dieser Methode liegt in der schnellen Ausführung und der nahezu identischen Dateigröße.

Umgehen?

Natürlich ist es genauso einfach, die 'Verschlüsselung' wieder zu entfernen:

qpdf --decrypt crypted.pdf decrypted.pdf

4. Zusammenfassung

Verwenden Sie für schnelle Ergebnisse, identische Dateigrößen und einen einfach zu entfernenden Schutz gegen "zufälliges" Auswählen und Kopieren von Text "Schutz" / "Verschlüsselung" mit einem leeren Kennwort.

Verwenden Sie für langsame Ergebnisse und möglicherweise große Dateigrößen (aber nicht immer gut aussehende Seiten) und etwas mehr Arbeit, um den Schutz zu entfernen, die Pixelung für alle Seiten.

Verwenden Sie für noch langsamere Ergebnisse (aber immer besser aussehende Seiten) und auch für das Entfernen des Schutzes die Vektorumrissmethode für den gesamten Text.

Beachten Sie immer, dass all diese Methoden den Inhalt Ihrer PDF-Seiten nicht absolut schützen. Sie machen es nur umständlicher zu extrahieren.

Kurt Pfeifle
quelle
6

Am besten konvertieren Sie die PDF-Datei mit ImageMagick über die Befehlszeile in Bilder aller Art. Diese Site bietet einige anständige Details zur Verwendung von PHP mit ImageMagick, um diese Aufgabe zu automatisieren. Auf einer sehr grundlegenden Ebene werden auf dieser Site die Grundlagen dazu über die Terminalbefehlszeile erläutert :

convert my_great_file.pdf my_great_file.png

Um das Ausgabeformat von PNG in JPEG zu ändern, ändern Sie einfach die Dateierweiterung des Zieldateinamens wie folgt:

convert my_great_file.pdf my_great_file.jpg

Der Trick in Ihrem Fall ist, dass Sie sicherstellen müssen, dass auf Ihrem Hosting-Service ImageMagick installiert ist. Und wenn nicht, wären sie bereit, es zu installieren. Nach meiner Erfahrung ist ImageMagick ein so häufig verwendetes Tool, dass es vorhanden sein sollte. Das einzige potenzielle "gotcha" ist, dass die Installation nicht mit eingebauter PDF-Unterstützung durchgeführt wurde. Aber damit müssen Sie sich auseinandersetzen.

Wenn Sie einzelne Bilddateien aus der PDF-Datei erstellen, ist es auch einfach genug, eine neue PDF-Datei mit diesen Bilddateien zu erstellen:

convert *.jpg my_new_great_file.pdf

Es scheint auch, dass convertPDF direkt in PDF konvertiert werden kann, wobei das Endprodukt durch einfaches Ausführen der folgenden Schritte gerastert wird:

convert my_great_file.pdf my_new_great_file.pdf

Das würde ein PDF mit gerasterter Ausgabe bei 72 dpi erzeugen. Sie können dies gegebenenfalls anpassen, indem Sie die folgende -densityOption verwenden:

convert -density 144 my_great_file.pdf my_new_great_file.pdf

Das würde ein neues PDF erzeugen, das aus gerasterten Bildern mit 144 dpi besteht.

JakeGould
quelle
@elderelder Danke! Der Schlüssel für das Original-Poster ist, dass ImageMagick möglicherweise nicht auf magische Weise die gewünschte Ausgabe in einem einzigen Versuch erzeugt, selbst wenn es installiert ist. Es könnte eine Lernkurve geben, die es dazu bringt, sich zu verhalten und das zu tun, was es tun soll. Trotzdem ist es das beste und am häufigsten verwendete Linux / Unix-Image-Konvertierungstool, sodass es unzählige Tipps zur Verwendung gibt.
JakeGould
1
Ja, ich liebe imagemagik, aber ich möchte immer noch, dass die Ausgabe pdf ist, und selbst wenn ich es nicht täte, bin ich mir nicht sicher, dass es keine Probleme geben würde, mehrere Seiten zu haben. Ich möchte definitiv nicht mit einem extrem langen PNG enden, das nichts anzeigen kann.
UserZer0
1
@ UserZer0 Sie können dann aus einzelnen Bildern ein PDF erstellen, indem Sie so etwas ausführen convert *.jpg my_new_great_file.pdf. Schau dir meine Bearbeitung an.
JakeGould
Hm. Können Sie direkt von PDF zu PDF wechseln? Das könnte einfacher sein. Vielleicht können Sie eine der Konvertierungsoptionen verwenden (z. B. -density), um bei Bedarf eine Rasterung zu erzwingen.
Bob
2
@JakeGould: Ihre Antwort funktioniert, aber die Methode ist zu kompliziert. Es ist besser zu nutzen ImageMagicks convert(die einen beschäftigt Ghost Delegierten ohnehin für PDF Dolmetschen) zur direkten PDF-to-PDF - Konvertierung : convert vector.pdf rasterized.pdfGibt alle Seiten des Eingang vector.pdf als rasterized.pdf in dem alle Seiten auf die Bilder mit der Standardauflösung gemacht werden von 72 PPI. Um eine höhere Auflösung in der Ausgabe von beispielsweise 200 PPI zu erhalten, fügen Sie einfach -density 200...
Kurt Pfeifle
3

Sie können verwenden pdftk:

pdftk input.pdf output protected.pdf owner_pw "secret" allow ScreenReaders

Dadurch wird ein Kennwort festgelegt, das ModifyContents und CopyContents deaktiviert, ScreenReaders jedoch zulässt.

Etwas, das nicht von Java abhängt, wäre qpdf, aber ich habe nicht die genaue Syntax zur Hand.

Jan
quelle
Schöner Tipp! Mein einziges Problem ist die Java-Anforderung. Abhängig davon, wie der Webdienst, der die PDF-Dateien hostet, eingerichtet ist, kann nicht angegeben werden, wo Java verwendet werden kann.
JakeGould
Die Antwort wurde bearbeitet, um qpdf einzuschließen.
Jan
1
Dies ist eine gute Information, aber das Problem ist # 1 Ich möchte die PDFs nicht mit einem Passwort schützen, und # 2 hilft dies nur, wenn der Anzeige-Client die Einschränkungen beachtet. Ich bin mir ziemlich sicher, dass ich meinen Server nicht mit Java konfiguriert habe, aber danke für den Tipp.
UserZer0
Zum Zeitpunkt Ihres Kommentars war die Antwort bereits enthalten qpdf, um Personen gerecht zu werden, die kein Java haben. Abgesehen davon ist dies nichts, was die UX ändern würde, da das "Passwort" nur Beschränkungen für die Datei festlegt. Alles , was Sie möglicherweise mit den Dateien tun, hilft nicht wirklich , da der auf dem Bildschirm angezeigte Text leicht OCR-fähig ist.
Jan
1
@ UserZer0: Sie stellen sich vor, dass der Kennwortschutz für PDF-Dateien erfordert, dass Benutzer das Kennwort kennen und eingeben, wenn sie das Dokument anzeigen. Diese Vorstellung entspricht nicht der Realität. Sie können ein leeres Passwort verwenden. Die Betrachter werden dann beim Öffnen der PDF-Datei nicht nach dem Kennwort gefragt. Sie werden erst danach fragen, sobald der Benutzer versucht, zu drucken, zu kopieren oder das zu tun, was "geschützt" ist. (Diese "Verschlüsselung" kann natürlich leicht umgangen werden. Gleiches gilt jedoch für Ihre bevorzugte Methode zur Pixelung der Seiten ...)
Kurt Pfeifle