Ich habe mich gefragt, wie ich den Code einer PDF-Datei anzeigen und bearbeiten soll.
Beim Anzeigen möchte ich das Binärformat nicht sehen, daher denke ich, dass es
hexdump
möglicherweise nicht das ist, was ich möchte. Ich habe es versuchtgedit
, aber es kann keine Codierungsmethode zum Decodieren des PDF-Inhalts verwendet werden.Durch das Bearbeiten möchte ich sie suchen
/Fit
und ändern,/XYZ
indem ich zum Beispiel sed. Mein Befehlsed s/\/Fit/\/XYZ/ < 1.pdf > 2.pdf
scheint jedoch das Erscheinungsbild meiner PDF-Datei nicht wie erwartet zu ändern, obwohl er keinen Fehler meldet. Ich habe mich gefragt, obsed
PDF-Dateien tatsächlich so bearbeitet werden können, als wären sie einfacher Text.
Der Kontext meiner Fragen kann aus dieser Frage entnommen werden . Mein Betriebssystem ist Ubuntu 10.10.
!
,\b
undg
das? Kann es ohne Perl nur mit sed gemacht werden?g
bedeutet, alle Vorkommen in jeder Zeile sowohl in sed als auch in perl zu ersetzen.!
ist das Trennzeichen; Sie können (fast) jedes Zeichen als Trennzeichen für dens
Befehl auswählen ( dies gilt sowohl für sed als auch für perl).\b
bedeutet eine Wortgrenze; es existiert in perl aber nicht in sed.Zu Ihrer ersten Frage ("Quellcode anzeigen, aber keine Binärdatei"): Es gibt einige Optionen, mit denen Sie die internen Binärdatenströme, die an viele Objekte angehängt sind, dekomprimieren können.
Mein Lieblingswerkzeug dafür ist QPDF , das auf allen wichtigen Betriebssystemplattformen verfügbar ist. Der folgende Befehl dekomprimiert alle Streams und alle Objekt-Streams:
Jetzt können Sie Ihre PDF-Datei in einem beliebigen Texteditor öffnen. (Möglicherweise befinden sich noch einige binäre Blobs darin: z. B. Schriftdateien und ICC-Profile, deren Erweiterung für QPDF nicht sinnvoll wäre.)
Zum erneuten Komprimieren der
expanded.pdf
nach dem Bearbeiten , können Sie Folgendes ausführen:(Vorsicht beim manuellen Bearbeiten von PDFs! Um dies richtig zu machen, müssen Sie viel über die interne Syntax wissen. Sobald Sie ein einzelnes Byte hinzufügen oder löschen, können Sie Fehlermeldungen von PDF-Readern erhalten, die dies möglicherweise nicht mehr können Öffnen Sie es, da das interne ToC der PDF-Dateien beschädigt ist, was auf Byte-Offset-Berechnungen basiert. Das Ersetzen
Fit
durchXYZ
Zeichenfolgen sollte jedoch in Ordnung sein ...)quelle
fix-qdf
Programms, das Teil von qpdf ist, neu berechnet werden. Du musst trotzdem ein bisschen vorsichtig sein. Siehe qpdf.sourceforge.net/files/qpdf-manual.html#ref.qdffix-qdf
. Wenn Sie also eine Zeichenfolge durch eine Zeichenfolge unterschiedlicher Länge ersetzen möchten, ist dies möglich, Sie müssen jedoch dasfix-qdf
Werkzeug verwenden. Ich würde sagen, dass dies eine nützliche Ergänzung zur Antwort ist.sed
ist zeilenorientiert, was es nicht gut für Binärdateien geeignet macht, die als Blöcke und nicht als Zeilen strukturiert sind.Versuchen Sie stattdessen bbe (bbe-.sourceforge.net).
Alternativ öffnen sowohl Emacs (GNU und XEmacs) als auch vim PDF-Dateien nahtlos. Es ist natürlich nicht sehr hübsch gedruckt, da es sich um gemischten Text und Binärdateien handelt, aber es reicht für Ihre Bearbeitungszwecke aus.
Es gibt ein Pdftk- Plugin für vim, das alles einfacher macht. Laden Sie es hier herunter (Zip-Datei).
Wie Sie wahrscheinlich wissen, verfügen beide oben genannten Editoren über leistungsstarke Such- und Ersetzungsfunktionen.
Das Konvertieren der PDF-Datei in den QDF-Modus vor dem Bearbeiten von PDF-Dateien ist sehr einfach.
quelle
sed
dem-b
Schalter zu bearbeiten . Wenn es funktioniert, werde ich dies zu meiner Antwort hinzufügen.-b
, dann ist es Cygwin spezifisch.Verwenden Sie LibreOffice oder OpenOffice, um die PDF-Datei zu öffnen, anzuzeigen, zu ersetzen, eine neue PDF-Datei zu schreiben usw. Ich denke, Sie können sie sogar über die Befehlszeile oder programmgesteuert verwenden, wenn viele Dokumente verarbeitet werden müssen.
Beachten Sie, dass PDFs aus einigen Quellen, z. B. Scannern, die Seiten häufig als Bilder und nicht als Text enthalten, sodass Sie bei der Verwendung von Suchen und Ersetzen kein Glück haben.
quelle