AA_PO-21061_Fotolia_ErwinWodicka.jpg

© Erwin Wodicka, Fotolia

Suchen und Finden

In PDF- und PS-Dateien suchen

19.01.2012
Postscript und PDF erzeugen kann jeder – darin suchen ist schon etwas schwieriger. Wir zeigen, welche Werkzeuge zum Erfolg verhelfen.

Daten nach bestimmten Inhalten zu durchsuchen und die Ergebnisse zu filtern, gehört zu den Aktivitäten, die im Alltag am häufigsten vorkommen. Für versierte Linux-Nutzer zählen die Grep-Kommandos zu den vertrauten Werkzeugen beim Filtern von Textdaten. Bei PDF und Postscript handelt es sich zwar im weitesten Sinne ebenfalls um Textformate, die jedoch einem spezifischen Schema für den Dokumentaufbau folgen (siehe Kasten "Postscript im Detail" und Kasten "PDF im Detail").

Daher funktioniert die Suche in solchen Dokumenten nicht wie gewohnt. Das ist umso ärgerlicher, als Postscript und PDF zu den Dokumentformaten zählen, die in der IT-Welt mit am häufigsten zum Einsatz kommen – Postscript beispielsweise in der Druckvorstufe und PDF zum Dokumentenaustausch, dem Rechnungswesen und vermehrt in der digitalen Archivierung gemäß PDF/A-1a-Spezifikation [1].

Postscript im Detail

Bei Postscript handelt es sich um eine stackbasierte Programmiersprache [10], welche ein Postscript-Interpreter verarbeitet, den man Raster Image Processor (RIP) nennt. Viele Drucker verfügen über eine separate Platine mit einem Postscript-Controller und können daher Postscript-Dokumente direkt verarbeiten und ausdrucken.

Hinter Druckerverwaltungen wie lpr und dem Common Unix Printing System (CUPS) stecken Werkzeuge, die die Druckdaten für den Interpreter und das Ausgabesystem über Postscript Printer Descriptions (PPDs) entsprechend aufbereiten. Zur Vorschau der Druckdaten am Bildschirm dient Ghostscript [11]. Für Debian/Ubuntu finden sich CUPS-Filter und -Treiber sowie PPDs im Paket ghostscript-cups, der Software-RIP in den beiden Paketen ghostscript und ghostscript-x.

Der Aufbau einer Postscript-Datei folgt Prinzipien, wie sie auch bei der Programmierung üblich sind (Abbildung 1). So finden sich beispielsweise Variablendefinitionen, Prozeduren und Zuweisungen sowie Konstrukte für Schleifen und Wertevergleiche. Nach dem Vorspann ("Prolog") folgt der eigentliche Inhalt, Script genannt.

Neben Prozedurdefinitionen (%%BeginProcSet) enthält das Script unter anderem auch die Seitengröße (%%BeginSetup). Jede einzelne Seite beginnt mit dem Kommando %%Page. Danach folgen die Anweisungen für das Positionieren und Zeichnen der Grafik- und Textobjekte auf der Seite. Den Abschluss des Dokuments bildet ein Abspann. Er beginnt mit %%Trailer und endet mit der Markierung %%EOF ("end of file").

Weitere Details, Kommandos und ausführliche Beispiele zu Postscript beinhaltet das "PostScript Language Cookbook" [12].

Abbildung 1: Der Aufbau einer Postscript-Datei.

PDF im Detail

Die Abfolge der Strukturen in PDF und Postscript fallen nahezu identisch aus (siehe [13], S. 62). Ein PDF-Dokument besteht ebenfalls aus vier Abschnitten (Abbildung 2) – dem Vorspann ("Header"), dem Inhalt ("Body"), dem Inhaltsverzeichnis der Objekte ("Cross-reference table") und dem Abspann ("Trailer").

Im Header stehen die Metainformationen zum Dokument, wie etwa die PDF-Version, der Autor, die Schlüsselworte zum Dokumenteninhalt sowie das Programm, mit dem das PDF-Dokument erzeugt wurde. Diese Metainformationen lassen sich mit den beiden Werkzeugen pdfinfo [14] und pdftk [15] auslesen und verändern. Teil 7 dieser Serie [16]) hat sich ausführlich mit diesen Programmen befasst.

Nach dem Header folgt im PDF-Dokument der eigentliche Inhalt ("Body"). Er besteht aus einer Folge von einzelnen Objekten mit Seiten- und Größeninformation, Positionsangaben sowie Text- und Grafikkommandos (genannt "Object Stream"). Um diese Objekte und deren Abfolge in der Darstellung zu bestimmen und einen wahlfreien Zugriff darauf zu ermöglichen, enthält das Dokument ein Inhaltsverzeichnis der einzelnen Objekte (PDF-Kommando xref). Zum Schluss des Dokuments folgt der Abspann, der die Position des Inhaltsverzeichnisses beinhaltet (startxref) und das Ende des PDF-Dokuments markiert (%%eof).

Abbildung 2: Der Aufbau einer PDF-Datei.

Suchen in Textdaten

Beim Wiederfinden von Daten anhand einer Suchanfrage handelt es sich um einen recht komplexer Vorgang. Zunächst gilt es den Suchstring – also das Textfragment, nachdem man fahndet – in eine interne Darstellung für den Suchvorgang umzuwandeln, beispielsweise in einen Regulären Ausdruck [2]. Mit dieser modifizierten Anfrage durchsucht ein Algorithmus die Datenmenge und markiert die einzelnen Fundstellen. Vor der Ausgabe des Suchergebnisses erfolgt eine Sortierung der Suchtreffer anhand der Relevanz, meistens beginnend mit der höchsten Übereinstimmung mit dem Suchstring ("absteigende Sortierung"). Mittlerweile gewinnen alternative Darstellungen an Beliebtheit, wie etwa mehrfarbige Ringe und Waben (Abbildung 3) oder Baumstrukturen. Dabei erfolgt eine Kategorisierung der Dokumente anhand der zugehörigen Stichworte.

Abbildung 3: Visualisierung eines Suchergebnisses mit dynamischen Waben bei Carrot Search.

Um Postscript- und PDF-Dokumente in die Suche miteinzubeziehen, bedarf es etwas mehr Mühe. Einfache Grep-Kommandos helfen kaum weiter, um das Vorkommen eines Suchstrings in festzustellen. Der Grund dafür liegt in der Art und Weise, wie Postscript und PDF die eigentlichen Inhalte im Dokument abspeichern. Den Ausgangspunkt bildet ein zweidimensionales Koordinatensystem mit dem Nullpunkt in der linken oberen Ecke jeder Seite. Alle Objekte werden mit den entsprechenden X/Y-Koordinaten im Dokument abgelegt und darüber exakt auf der Seite positioniert.

Um ein möglichst perfektes Druckbild zu erreichen, folgen Satzsysteme wie beispielsweise LaTeX den Konventionen aus über 500 Jahren Buchdruck. Beim Umwandeln von LaTeX nach Postscript/PDF werden die Absätze in einzelne Wörter und Buchstaben zerlegt ("bounding boxes"). Feinheiten im Satz, wie etwa Über- und Unterschneidungen der Buchstaben, realisiert das Verfahren über entsprechend verkürzte oder vergrößerte Abstände zwischen den einzelnen Zeichen. Der geometrische Anfang eines Buchstabens wird in die passenden X/Y-Koordinaten umgerechnet.

Postscript und PDF haben gemeinsam, dass die Abfolge der Objekte im Dokument nur einen begrenzten Schluss auf das endgültige Aussehen des Dokuments – das Druckbild – zulässt. Bei Postscript kann man die Positionierungen immerhin noch seitenweise nachzuvollziehen, bei PDF-Dokumenten muss man dazu die einzelnen Elemente des gesamten Object Streams verfolgen.

Dabei dürfen obendrein nachfolgende Objekte vorhergehende wieder überdecken, beispielsweise um eine nachträgliche Schwärzung von Text mit Hilfe eines Balkens zu erreichen. Bei der Anzeige oder dem Ausdruck des Dokuments lassen sich diese Einzelschritte nicht mehr erkennen, da nur die "Draufsicht" erscheint und die einzelnen Ebenen nicht mehr zu sehen sind. Zudem gestattet PDF neben dem Verweis auf externe Daten auch das Einbinden von verkleinerten Vorschaubildern mit unterschiedlichen Auflösungen, Videos, Flash- und Javascript-Elementen sowie komprimierten Daten und Anhängen mit den jeweiligen Referenzen aufeinander.

Finden sich Textfragmente in Form eingebundener Grafiken im Dokument, verhält es sich ähnlich wie bei Webseiten: Zwar kann ein Mensch den Text problemlos erfassen, er lässt sich aber nicht oder nur schwer automatisch von Programmen wie grep verarbeiten. Suchmaschinen versuchen dieses Problem zu lösen, indem bei der Dokumentanalyse zusätzliche Programme zur Texterkennung [3] einbinden. Aus Sicht des Endanwenders steht dieser Aufwand jedoch vielfach nicht im gesunden Verhältnis zum tatsächlichen Nutzen.

Suche in Postscript-Dateien

Für Dateien im Postscript-Format stehen als Betrachter beispielsweise Ghostview, Kghostview, Evince und Okular zur Verfügung. Keines der genannten Werkzeuge ermöglicht bislang eine Suche in den Daten: Menüpunkte zur Recherche gibt es zwar, sie lassen sich aber nicht anwählen.

Um trotzdem ein zumindest ansatzweise brauchbares Ergebnis zu erzielen, bleibt nur der Ausflug auf die Kommandozeile. Hier erweisen sich die Werkzeuge pstotext, ps2ascii und grep als hilfreich. Die Kombination daraus sieht folgendermaßen aus:

$ pstotext Datei.ps | grep --color Suchstring
$ ps2ascii Datei.ps | grep --color Suchstring

Die Kommandos extrahieren den Text aus der Postscript-Datei und schreiben ihn auf die Standardausgabe. Von dort gelangt er über eine Pipe als Eingabe an das Kommando grep, das dann in den Daten nach dem übermittelten Suchstring fahndet. Die Grep-Option --color hebt den Suchtreffer in der Ausgabe farblich hervor und erleichtert so das Auswerten der Trefferliste.

Beide Varianten benötigen wenig Zeit, haben aber den Nachteil, dass sie nur Zeichen im Encoding ISO 8859-1 (Latin-1) zuverlässig auslesen können. Andere Codierungen, wie etwa ISO 8859-15 (Latin-1 mit Euro) oder UTF-8 unterstützen sie nur bedingt. Im Ergebnis zeigt sich das, indem eine Suche nach Fragmenten mit Umlauten maximal Teilergebnisse liefert oder sogar gänzlich fehlschlägt. Im Test kam Ps2ascii etwas besser mit Umlauten zurecht, dafür fehlen Wortzwischenräume und Zeilenumbrüche.

Im Laufe der Recherchen ergab sich eine (wenn auch auf den ersten Blick ungewohnte) Alternative zu Ps2ascii – der Umweg über PDF:

$ ps2pdf Datei.ps
$ pdfgrep Datei.pdf Suchstring

Mit dieser etwas seltsam anmutenden Aufruffolge von Ps2pdf über Pdfgrep gelingt die Suche im Postscript-Dokument.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Suche in komprimierten Dateien und Archiven
    Über die Kommandozeile flink in komprimierten Dateien und Archiven zu suchen, spart viel Zeit. Die richtigen Tools dazu bringt praktisch jedes Linux-System von Haus aus mit.
  • Bild und Druck
    Durch seine reiche Ausstattung an Werkzeugen eignet sich Linux wie kaum ein anderes Betriebssystem zum Umgang mit Postscript- und PDF-Dokumenten. Wir stellen die besten Tools zur Anzeige und Konvertierung vor.
  • Nicht nur zum Drucken
    PDF und PostScript sind in der Linux-Welt zwei wichtige Dateiformate. In diesem Artikel erfahren Sie, wie Sie diese Formate erzeugen, betrachten, konvertieren und ausdrucken.
  • Notizen in PDFs anzeigen und bearbeiten
    Digitale Post-Its im PDF helfen beim Teamwork. Aber nur wenige Applikationen kleben den virtuellen Zettel an die richtige Stelle.
  • Know-how für die Kommandozeile
    Erfahrene Linux-Nutzer schwören auf flexible Kommandozeilentools, mit denen sie manche Aufgabe schneller bewältigen als in grafischen Programmen. Wir stellen interessante Anwendungen und Aufrufparameter vor, um auch Einsteiger zu einem Ausflug in die Shell zu ermutigen.
Kommentare
Suchen in Farbe
Markus Berlin, Freitag, 20. Januar 2012 09:37:48
Ein/Ausklappen

Vielen Dank für den schönen Artikel! Folgeartikel zu OCR oder auch zu genaueren PDF/PS-Innereien fände ich großartig. :)

Nur zwei Anmerkungen:

(1)

$ for datei in $(ls *.pdf); do pdftotext $datei - | grep --color Suchstring ; done

welchen Vorteil hat das gegenüber:

$ for datei in *.pdf; do pdftotext $datei - | grep --color Suchstring ; done

(2)

"""Da Less die farbliche Hervorhebung der Suchtreffer nicht übernimmt, können Sie dabei die grep-Option --color im Aufruf streichen."""

less übernimmt die Hervorhebung, wenn man ihm die Option "-R" gönnt.

Viele Grüße



Bewertung: 159 Punkte bei 16 Stimmen.
Den Beitrag bewerten: Gut / Schlecht

Infos zur Publikation

title_2014_08

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

Server antwortet mit falschem Namen
oin notna, 21.07.2014 19:13, 0 Antworten
Hallo liebe Community, Ich habe mit Apache einen Server aufgesetzt. Soweit, so gut. Im Heimnet...
o2 surfstick software für ubuntu?
daniel soltek, 15.07.2014 18:27, 1 Antworten
hallo zusammen, habe mir einen o2 surfstick huawei bestellt und gerade festgestellt, das der nic...
Öhm - wozu Benutzername, wenn man dann hier mit Klarnamen angezeigt wird?
Thomas Kallay, 03.07.2014 20:30, 1 Antworten
Hallo Team von Linux-Community, kleine Zwischenfrage: warum muß man beim Registrieren einen Us...
openSUSE 13.1 - Login-Problem wg. Fehler im Intel-Grafiktreiber?
Thomas Kallay, 03.07.2014 20:26, 8 Antworten
Hallo Linux-Community, habe hier ein sogenanntes Hybrid-Notebook laufen, mit einer Intel-HD460...
Fernwartung für Linux?
Alfred Böllmann, 20.06.2014 15:30, 7 Antworten
Hi liebe Linux-Freunde, bin beim klassischen Probleme googeln auf www.expertiger.de gestoßen, ei...