PostScript ist eine plattformunabhängige Programmiersprache, in der Texte und Grafiken an Drucker übermittelt werden. Neben den bekannten Viewern für diese Formate gibt es auch auf der Kommandozeile viele nützliche und schnelle Tools, die .ps-Dateien bearbeiten und anzeigen. Wir zeigen, wie Sie mit Ghostscript und den PSUtils “geistreich” arbeiten.
Zu Befehl
Auch wenn sich viele Dinge bequem über grafische Oberflächen wie KDE oder GNOME regeln lassen – wer sein Linux-System richtig ausreizen möchte, kommt um die Kommandozeile nicht herum. Abgesehen davon gibt es auch sonst viele Situationen, in denen es gut ist, sich im Befehlszeilendschungel ein wenig auszukennen.
Ghostscript [1] kann mit PostScript- und PDF-Dateien umgehen. Zur Konvertierung in andere Formate bringt das Programm eine Vielzahl von Treibern (“Devices”) mit. So stellt es nicht nur Druckertreiber zur Verfügung, es kann auch PostScript in PDF wandeln oder Dateien für die Anzeige am Bildschirm vorbereiten.
Die PSUtils [2] sind eine Sammlung von Programmen, mit denen Sie PostScript-Dateien bearbeiten können. Dazu gehören die Tools psnup (bringt mehrere Seiten auf eine), psresize (verändert die Papiergröße), psselect (wählt einzelne Seiten aus der PostScript-Datei aus), pstops (Manipulieren von Dokumenten, z. B. Vergrößern oder Verkleinern), psbook (ordnet Seiten wie in einem Buch an) und epsffit (bringt eine EPS-Datei auf eine bestimmte Größe).
Bevor es in die Tiefen der Kommandozeilen-PostScript-Verarbeitung geht, lohnt sich ein Blick auf die Grundlagen: Wie sind PostScript-Dateien aufgebaut?
Wer, wie, was?
Theoretisch ist es möglich, eine PostScript-Datei von Hand in einem Editor zu erstellen (Kasten 1), da es sich um reine ASCII-Dateien handelt. Im Normalfall übernimmt diese Aufgabe aber die Druck-Routine eines Programmes. Anschließend muss das Gerät, das die Informationen aus PostScript-Dateien verarbeiten will, mit einem entsprechenden Interpreter ausgestattet sein, um die Datei am Bildschirm oder Drucker auszugeben – das kann beispielsweise ein PostScript-Drucker sein, der in seiner Firmware einen PostScript-Interpreter besitzt.
Kasten 1: PostScript von Hand
Auf den Seiten von Holger Gehringer [3] finden Sie ein ausführliches Tutorial, das von einfachen Beispielen (z. B. Linien und Quadrate) über komplizierte Schriftvariationen viele Tipps und Tricks bietet. Ein einfaches Dokument mit dem Text “Hallo Welt” könnte dementsprechend so aussehen:
%!PS-Adobe-1.0 % Versionsnummer (PostScript-Versionen 1-3) /Times-Roman findfont % Font suchen 48 scalefont % Schrift auf 48 Punkte skalieren setfont % die gewaehlte Schrift zum 'aktuellen Font' machen 100 500 moveto % Anfangspunkt fuer Textausgabe setzen (Hallo Welt!) show % 'Hallo Welt!' ausgeben showpage % aktuelle Seite ausgeben
PostScript-Dateien folgen im Idealfall einigen Regeln und Konventionen, die die Weiterverarbeitung durch andere Programme erleichtern. Eine Seitenbeschreibung ist beispielsweise immer in Prolog (Definitionen) und Skript (beschreibt Seite anhand der Definitionen) aufgeteilt. Handelt es sich um ein mehrseitiges Dokument, sollten die einzelnen Seiten unabhängig voneinander beschrieben werden.
An unserem einfachen Beispiel lassen sich einige wichtige Eigenschaften erkennen:
- Kommentare beginnen mit einem Prozentzeichen und enden mit einer neuen Zeile.
- Strukturinformationen sind besondere Kommentare und beginnen mit
%!oder%%. (Wichtig: die Zeichen müssen am Anfang einer Zeile stehen, da sie sonst als “normale” Kommentare interpretiert werden.) - Ein PostScript-Dokument beginnt immer mit
%!, am besten mit Versionsnummer
Neben .ps-Dateien finden sich häufig auch .eps-Files (“Encapsulated PostScript”, auf deutsch etwa “gekapseltes PostScript”). Diese Dateien dienen zum Transport von Informationen (meistens Grafiken) zwischen Programmen und dürfen in Dokumente eingebunden und skaliert werden. Der ursprüngliche PostScript-Code wird dabei in eine “Bounding Box” eingeschlossen, welche die horizontalen und vertikalen Koordinaten und die linken untere und rechte obere Ecke der Grafik angibt.
Der, die, das…
Viele Wege führen zu PostScript- und PDF-Dateien. Wer mit LaTeX [1] arbeitet, wandelt einfach .dvi-Dateien auf der Kommandozeile in PostScript um:
huhn@huhnix:~> dvips datei.dvi -o This is dvips(k) 5.86 Copyright 1999 Radical Eye Software (www.radicaleye.com) ' TeX output 2002.07.23:1627' -> datei.ps
Simple Textdateien verarbeiten Sie mit a2ps[4] weiter. Ursprünglich war das Programm als Konvertierungsprogramm (Text nach PostScript) konzipiert. In neueren Versionen kann dieser PostScript-Filter aber auch mit komprimierten Dateien, LaTeX-Dokumenten und sogar Bildformaten umgehen (Abbildung 1). Eine komplette Übersicht, was das Programm alles kann, erhalten Sie mit:
huhn@huhnix:~> a2ps --list=delegations
Applications configured for delegation
[…]
Delegation `ImageMagick', from png to ps
#{del.imagick} 'png:$f' ps:- | #{del.psselnup}
[…]
Der Eintrag Delegation `ImageMagick', from gif to ps bedeutet beispielsweise, dass a2ps mit Hilfe des externen Programms ImageMagick Bilder im PNG-Format (“Portable Network Graphics”) in PostScript wandelt.
Wieso, weshalb, warum?
Mit dem Acrobat Reader, KGhostView, GNOME-GhostView und gv als grafischen Schnittstellen zu Ghostscript kommen zahlreiche GUIs zum PostScript-Betrachten, -Umwandeln oder -Drucken. Wer aber Vorgänge (etwa in Shell-Skripts) automatisieren will, kann auch direkt auf das eigentliche Ghostscript-Programm gs zugreifen.
gs kann mit oder ohne Angabe einer PostScript- oder PDF-Datei auf der Kommandozeile gestartet werden. Neben einem Anzeigefenster sehen Sie als Output im Terminal-Fenster etwas wie:
huhn@huhnix:~> gs apfelkuchen.ps ESP Ghostscript 7.05 (2003-02-05) […] Loading NimbusRomNo9L-Regu font from /usr/share/ghostscript/fonts/n021003l.pfb… 2052880 687555 1642520 342518 0 done. […] >>showpage, press <return> to continue<<
Drücken Sie an dieser Stelle [Return] oder starten Sie gs ohne Angabe eines Dateinamens, um die Eingabeaufforderung GS> zu erhalten. Den Interpreter verlassen Sie mit quit am Prompt oder [Strg-C]. Hilfe gibt es mit gs -h oder gs -? – neben einer Übersicht über einige Treiber und Ghostscript-Switches sehen Sie hier auch die Versionsnummer. (Für GNU Ghostscript ist zum Zeitpunkt dieses Artikels Version 7.05.6 aktuell; es gibt einen weiteren Zweig, der unter einer restriktiveren Lizenz steht, die im Wesentlichen aber nur die kommerzielle Distribution verbietet: Die aktuelle “AFPL-Ghostscript-Version” ist 8.10.)
Um einen bestimmten Treiber (Device) zu benutzen, hängen Sie diesen als Parameter an den gs-Aufruf an, z. B. -sDEVICE=epson datei.ps, falls Sie die Datei an einen Epson-Drucker schicken möchten, oder -sDEVICE=x11 datei.ps für die Ausgabe am Bildschirm. Alternativ starten Sie gs und geben am Prompt ein:
huhn@huhnix:~> gs […] GS> (x11) selectdevice GS> (apfelkuchen.ps) run
Soll nicht direkt gedruckt werden, hilft die Option -sOutputFile weiter: gs ist in der Lage, aus PostScript-Dateien Bilddateien zu erstellen. In der Treiberliste finden Sie beispielsweise jpg als eine mögliche Option. Der Aufruf
huhn@huhnix:~> gs -sDEVICE=jpeg -sOutputFile=apfel.jpg apfelkuchen.ps
wandelt das PostScript-Dokument apfelkuchen.ps in eine JPEG-Datei namens apfel.jpg um.
Wer nicht fragt, bleibt dumm…
Im Paket psutils finden Sie viele einzelne Programme, die bei der Bearbeitung und Umformatierung von PostScript-Dateien helfen. Mit dem Programm psnup können Sie beispielsweise mehrere Dokumentseiten auf eine einzige packen:
huhn@huhnix:~> psnup -2 datei.ps 2seitig_datei.ps [1] [2] [3] [4] [5] Wrote 5 pages, 464732 bytes
Als zusätzliche Option darf die Papiergröße angegeben werden – entweder in Form fester Werte mit -wBreite und -hHöhe (wobei das Programm Zentimeter oder Punkt als Maßeinheiten versteht), oder Sie geben zusammen mit dem Parameter -p eines der gängigen Formate wie a3, a4, a5 usw. an.
Das Tool psresize verändert – wie der Name vermuten lässt – das Papierformat. Liegt eine Datei im amerikanischen Format letter vor, hilft
psresize -Pletter -pA4 datei.ps neue_datei.ps
weiter. psselect extrahiert bestimmte Seiten: über die Option -e zum Beispiel alle Seiten mit gerader Seitennummer, über -o die mit ungeraden Seitennummer. Das ist hilfreich, um Papier beidseitig zu bedrucken: In einem Laser-Drucker lässt man zunächst alle geraden Seiten ausdrucken, legt den Papierstapen neu ein und druckt dann alle ungeraden aus. In der Form -p1,2,3,4 können Sie auch eine durch Kommata getrennte Liste der gewünschten Seiten angeben; dabei können auch ganze Bereiche abgedeckt werden, zum Beispiel mit
psselect -p1-5,7-9 datei.ps neue_datei.ps
Um nur schnell in eine PostScript-Datei hineinzusehen, müssen die aufwendigen Anweisungen nicht entschlüsselt werden – mit ps2ascii erhalten Sie den reinen Text des Dokuments (Abbildung 2). Mit pstotext gibt es ein weiteres Tool, das die gleiche Aufgabe übernimmt, dabei aber bessere Ergebnisse bringt. Während ps2ascii Teil des Ghostscript-Pakets ist, finden Sie pstotext unter [5].
Glossar
-
.dvi-Datei
-
LaTeX legt nach dem eigentlichen Programmaufruf (“latex datei.tex”) verschiedene Dateien im Verzeichnis ab, mit denen dann weitergearbeitet wird. Dazu gehört auch eine Datei, die auf “.dvi” (device independent) endet. Es ist eine geräteunabhängige Ausgabedatei, die sich mit Hilfe eines Treibers für die Ausgabe auf dem Bildschirm oder dem Drucker umwandeln lässt.
Infos
[1] Ghostscript: http://www.cs.wisc.edu/~ghost/
[2] PSUtils: http://www.go.dlr.de:8081/pdinfo_dv/psutils.html
[3] PostScript Tutorial von Holger Gehringer: http://www.mathematik.uni-ulm.de/help/pstut/
[4] Kurt Pfeifle: “Verschlungene Pfade, der lange Weg der Druckdaten”, LinuxUser 10/2001, S. 38, http://www.linux-user.de/ausgabe/2001/10/038-drucken/drucken-kp1.html
[5] pstotext: http://www.research.compaq.com/SRC/virtualpaper/pstotext.html
[6] Heike Jurzik: LaTeX-Workshop I, “Gutenberg am Rechner”, LinuxUser 09/2002, S. 43, http://www.linux-user.de/ausgabe/2002/09/043-latex/index.html
[7] Heike Jurzik und Patricia Jung: “Des PostScripts neue Kleider”, LinuxUser 10/2001, S. 60, http://www.linux-user.de/ausgabe/2001/10/060-zubefehl/a2ps-3.html
[8] Heike Jurzik: “It’s a kind of magic!”, LinuxUser 07/2002, S. 84, http://www.linux-user.de/ausgabe/2002/07/084-zubefehl/convert.html







