Format, Format

PostScript-Dateien erzeugen und bearbeiten

01.04.2005
Unter Linux beginnt das Publishing schon auf der Kommandozeile: Mit "a2ps" erzeugen Sie Postscript-Dateien, mit den PSUtils bringen Sie die generierten Dokumente nahezu beliebig in Form.

a2ps [1] stand ursprünglich für "ASCII to PostScript", als das Tool lediglich Textdateien nach PostScript konvertierte. Mittlerweile wandelt das Programm aber auch andere Dateiformate um, wie etwa komprimierte Dateien, LaTeX-Dokumente und sogar Bildformate. Daher steht der Programmname heute eher für "any to PostScript".

Den Output von a2ps schicken Sie entweder direkt an einen Drucker oder legen ihn zur weiteren Bearbeitung in einer PostScript-Datei ab. Bei der Nachbearbeitung stehen Ihnen die PSUtils [2] zur Seite. Das Programmpaket enthält viele nützliche Tools zur Manipulation solcher Dateien: Sie fassen mehrere Seiten zu einer zusammen, ändern das Papierformat verändern oder extrahieren sogar Seiten.

Die meisten Linux-Distributionen bringen sowohl die PSUtils als auch a2ps als Pakete mit, die sich unkompliziert über den jeweiligen Paket-Manager einspielen lassen.

Aus Text wird PostScript

Um eine Textdatei in PostScript umzuwandeln und direkt an den Drucker zu schicken, verwenden Sie den Befehl

$ a2ps text.txt
[text.txt (unformatiert): 2 Seiten auf einem Blatt]
[Insgesamt: 2 Seiten auf einem Blatt] zum voreingestellten Drucker geschickt

Standardmäßig verwendet a2ps stillschweigend die Option -2, welche jeweils zwei Spalten auf einer Seite unterbringt. Wollen Sie die Datei nicht direkt drucken, verwenden Sie den Parameter -o (wie englisch "output"), um die Ausgabe in einer Datei zu speichern. Dazu geben Sie zunächst die Datei an, die umgewandelt werden soll. Danach folgen der Parameter -o sowie der Namen der Ausgangsdatei:

$ a2ps text.txt -o text.ps
[text.txt (unformatiert): 2 Seiten auf einem Blatt]
[Insgesamt: 2 Seiten auf einem Blatt] in die Datei `text.ps' geschrieben

Legen Sie keinen Wert auf die Meldungen, dann hängen Sie einfach den zusätzlichen Parameter -q (für "quiet") an den Aufruf an. Ausführlicher fällt die Ausgabe von a2ps dagegen aus, wenn Sie die Option --verbose=<level> einsetzen. Sinnvoll sind beispielsweise Angaben wie --verbose=encodings oder auch --verbose=options. Eine vollständige Übersicht der verfügbaren Level erhalten Sie in den Info-Seiten zu a2ps über den Aufruf info a2ps.

Mehr davon, bitte!

Wie bereits erwähnt fasst a2ps standardmäßig zwei Seiten auf einem Blatt zusammen. Sie können diese Anzahl variieren, indem Sie an den Aufruf – durch ein Minuszeichen abgetrennt – eine Zahl zwischen eins und neun anhängen. Um also beispielsweise neun Textseiten auf einem Blatt unterzubringen (Abbildung 1), tippen Sie:

$ a2ps -9 bla.txt -o bla.ps
[bla.txt (unformatiert): 15 Seiten auf 2 Blättern]
[Insgesamt: 15 Seiten auf 2 Blättern] in die Datei `bla.ps' geschrieben
Abbildung 1: Mit "a2ps" bringen Sie bis zu neun Seiten auf einem Blatt unter.

Mit dem Parameter -n <anzahl> geben Sie an, wieviele Kopien des Dokuments Sie drucken möchten. Das funktioniert nur dann, wenn Sie die Seiten tatsächlich zum Drucker schicken; die Ausgabe-Umleitung mit -o funktioniert hier nicht.

Darüber hinaus können Sie a2ps gleich mehrere Dokumente zum Drucken oder Verwandeln übergeben: Hängen Sie die Dateinamen einfach im Aufruf hintereinander:

$ a2ps datei1.txt datei2.txt datei3.txt -o datei.ps

Standardmäßig fängt jede Datei auf einem neuen Blatt an. Um Papier zu sparen, können Sie allerdings a2ps mit der Option --file-align dazu überreden, die neuen Dateien auf der nächsten Seite abzubilden (Abbildung 2). Zusammen mit dem Parameter --file-align=virtual rücken die Daten aller als Argumente aufgeführten Dateien zusammen, so dass leere Seiten vermieden werden:

$ a2ps --file-align=virtual datei1.txt datei2.txt -o datei.ps
[datei1.txt (plain): 15 pages on 8 sheets]
[datei2.txt: 1 page on 1 sheet]
[datei3.txt: 9 pages on 5 sheets]
[Total: 25 pages on 13 sheets] saved into the file `datei.ps'
[38 lines wrapped]
Abbildung 2: Zusammen mit der Option "--file-align=virtual" überreden Sie "a2ps", die neue Datei auf der nächsten Seite auf dem gleichen Blatt zu drucken.

Hervorgehoben

Sogar Syntax-Highlighting-Qualitäten hat a2ps zu bieten: Das Programm erkennt viele gängige Dateiformate und hebt automatisch deren Syntax-Elemente hervor. Welche Formate und Programmiersprachen a2ps kennt, erfahren Sie auf der Kommandozeile mit dem Aufruf

a2ps --list=style-sheets | less

Am besten leiten Sie die recht lange Liste über das Pipe-Zeichen an den Pager less weiter und betrachten Sie seitenweise. Sollte a2ps ein Format dennoch nicht richtig erkennen, können Sie nachhelfen: Zusammen mit der Option --pretty-print=Sprache geben Sie einfach dem Syntax-Highlighting einen Schubs in die richtige Richtung. Anstelle von Sprache setzen Sie eine über die Ausgabe der Style-Sheet-Liste gefundene Sprache ein, z. B.:

a2ps --pretty-print=awk datei -o datei.ps

Standardmäßig hebt a2ps die Syntax-Elemente mit unterschiedlichen Fonts und Schriftstärken hervor; wer Farbe möchte, setzt zusätzlich den Parameter --prologue=color ein – jetzt erscheint nicht nur der Vorspann, sondern auch der Rest des Dokumentes schön bunt (Abbildung 3).

Abbildung 3: "a2ps" mit Syntax-Highliting – einmal in Schwarz-Weiß und einmal in Farbe.

Sehr kompakt

Komprimierte Dateien müssen Sie nicht erst umständlich auspacken und danach an a2ps übergeben; das Programm unterstützt auch hier viele verschiedene Formate. Eine komplette Liste erhalten Sie, wenn Sie a2ps --list=delegations | less tippen. Als komprimierte Formate tauchen in dieser langen Liste unter anderem gzip und bzip2 auf:

Weiterleitung `bzip2-a2ps', von `bzip2' an `ps'
        bzip2 -cd '$f' | #{del.a2ps}
[…]
Delegation `gzip-a2ps', from compress to ps
        gzip -cd '$f' | #{del.a2ps}
Delegation `gzip-a2ps', from gzip to ps
        gzip -cd '$f' | #{del.a2ps}
[…]

Um eine komprimierte Datei mit a2ps auf Papier zu bringen, tippen Sie beispielsweise:

$ a2ps /usr/share/doc/a2ps/FAQ.gz -o faq.ps
[/usr/share/doc/a2ps/FAQ.gz (gzip, delegated to gzip-a2ps): 5 pages on 3 sheets]
[Total: 6 pages on 3 sheets] saved into the file `faq.ps'

Bildlich

In der Liste der unterstützten Formate sehen Sie auch Einträge wie z. B.

Delegation `ImageMagick', from png to ps
        #{del.imagick} 'png:$f' ps:- | #{del.psselnup}

a2ps "delegiert" also bei Angabe einer Datei im PNG-Format das Drucken an ImageMagick (genauer gesagt, werkt hier convert unter der Haube) und wandelt somit auch viele Bildformate in PostScript-Dateien um.

Zusammenfassend

Nachdem Sie nun wissen, wie Sie schnell und unkompliziert PostScript-Dateien auf der Kommandozeile erstellen, ist es an der Zeit, sich einige Tools anzuschauen, die fertige PostScript-Dokumente weiterverarbeiten bzw. verändern können. So profiliert sich das Programm psnup als echter "Papier-Sparer" und bringt mehrere Seiten eines PostScript-Dokuments auf einer einzigen unter. Der Befehl erwartet zunächst die Angabe, wie viele Seiten zusammenzufassen sind, danach folgt der Name der Originaldatei und zum Schluss der Name des neuen Dokumentes. Um beispielsweise jeweils zwei Seiten einer PostScript-Datei auf eine zu bringen, tippen Sie

$ psnup -2 datei.ps datei2.ps
[1] [2] Wrote 2 pages, 428161 bytes

Die Ausgabe verrät, wie viele Seiten die neue Datei datei2.ps hat. Wer keinen Wert auf diese Informationen legt, setzt zusätzlich den Parameter -q (wie englisch "quiet") ein, um die Meldung auf der Konsole zu unterdrücken. Standardmäßig geht psnup (ebenso wie a2ps) davon aus, dass als Ausgabeformat DIN A4 gewünscht ist. Diese Information erhalten die Programme, indem Sie die Datei /etc/papersize auslesen.

Wollen Sie für psnup ein anderes Papierformat wählen, stellen Sie das über den Parameter -p <format> ein. Als Papiergrößen stehen Ihnen hier a0 bis a5, die amerikanischen Maße letter, legal und tabloid sowie viele weitere zur Verfügung. Eine komplette Auflistung aller Formate bietet die Manpage.

Um noch mehr Seiten auf einem Blatt unterzubringen, setzen Sie statt -2 einfach -3, -4, -6 oder -8 ein. Praktisch: Zusätzlich mit der Option -d zeichnet psnup einen Rahmen um die einzelnen Seiten – so wird es übersichtlich (Abbildung 4).

Abbildung 4: Mit dem Aufruf "psnup -d -4 datei.ps datei4.ps" passen vier Seiten auf ein einziges Blatt – übersichtlich abgetrennt durch einen Rahmen.

Die richtige Größe

Der Name verrät es: psresize wandelt Ihre PostScript-Dokumente in eine andere Größe um. Als Parameter übergeben Sie beim Aufruf die ursprüngliche Größe hinter der Option -P, die neue Größe mit -p und den Namen der originalen und neuen Datei an. Um ein DIN-A4-Dokument ins A5-Format zu bringen, tippen Sie also

$ psresize -Pa4 -pa5 datei.ps datei_a5.ps
[1] [2] [3] [4] Wrote 4 pages, 428049 bytes

Auch hier gilt wieder: Wenn Sie die Ausgabe stört, schaltet Sie diese einfach mit -q ab. psresize kennt, genau wie seine Kollegen, jede Menge Ausgabeformate. Daher eignet sich dieser Befehl hervorragend dazu, Dokumente mit internationalem Format anzupassen.

Darüber hinaus dürfen Sie psresize mit den Parametern -w ("width" = "Breite") und -h ("height" = "Höhe") eine genaue Größe in Zentimetern oder Inches (Zoll) vorgeben. Gerade für das Skalieren von EPS-Grafiken eignet sich psresize daher perfekt. Es erkennt selbständig, ob es das Bild vor dem Rendern drehen muss oder nicht.

Was kompliziert klingt, kann man sich an einem einfachen Beispiel schnell vor Augen führen. Zusammen mit der Ghostscript-Installation richten die meisten Distributionen eine Sammlung von PostScript-Grafiken ein, mit denen Sie herum experimentieren können. Bei Debian GNU/Linux finden sich die Beispiele im Verzeichnis /usr/share/doc/gs-esp/examples/); unter Suse Linux 9.2 liegen die Bilder in /usr/share/ghostscript/7.07/examples/.

Kopieren Sie die Datei tiger.ps (unter Debian GNU/Linux tiger.ps.gz) in Ihr Home-Verzeichnis. Unter Debian GNU/Linux entpacken Sie die komprimierte Datei dazu mit dem Aufruf gunzip tiger.ps.gz. Nun verändern Sie mit psresize die Größe; so führt der Aufruf

psresize -w6.0cm -h5.0cm tiger.ps tiger-neu.ps

dazu, dass psresize das neue Bild vor dem Rendern dreht. Wählen Sie stattdessen eine neue Höhe von 20 cm, nimmt psresize die Breite als begrenzenden Faktor und rendert den Hintergrund über die ganze Seite. Abbildung 5 zeigt den Original-Tiger und die beiden mit psresize veränderten Dateien nebeneinander.

Abbildung 5: Erst drehen, dann rendern.

Die richtige Wahl

Um einzelne Seiten aus einem PostScript-Dokument herauszulösen, setzen Sie das Programm psselect ein. Nur die geraden Seitenzahlen erwischen Sie, wenn Sie die Option -e ("even" = "gerade") einsetzen:

$ psselect -e datei.ps datei_e.ps
[2] [4] Wrote 2 pages, 184984 bytes

Alternativ fassen Sie nur die ungeraden Seiten eines Dokumentes mit dem Parameter -o ("odd" = "ungerade") zusammen. Noch genauer klappt das Selektieren zusammen mit der Option -p. Dahinter hängen Sie die genaue Bezeichnung der Seiten: Sie können entweder Einzelseiten mit Nummern durch Kommata oder ganze Bereiche spezifizieren. So löst der Aufruf psselect -p1-4,6 datei.ps datei_select.ps die Seiten 1 bis 4 und 6 aus dem Dokument und fasst das Ergebnis in der Datei datei_select.ps zusammen.

Ein weiteres praktisches Feature ist das Umkehren der Seitenreihenfolge: Der Parameter -r sorgt dafür, dass die Seiten der angegebenen PostScript-Datei rückwärts sortiert werden:

$ psselect -r datei.ps datei_r.ps
[4] [3] [2] [1] Wrote 4 pages, 425183 bytes

Bücherwurm

Das Programm psbook ordnet Seiten zum Drucken von Büchern oder Booklets mit Hilfe so genannter Signaturen an. Bevor ein gerade durchnummeriertes Dokument (1, 2, 3, 4, 5, 6, 7, 8) als Buch gedruckt werden kann, muss die Reihenfolge der Seiten richtig zu 1, 8, 2, 7, 3, 6, 4, 5 montiert werden. Am leichtesten kann man sich das vor Augen führen, indem man vier DIN-A4-Seiten übereinander legt und in der Mitte faltet (also zu einem DIN-A5-Booklet zusammenlegt). Nummerieren Sie jetzt die Seiten von 1 bis 16 durch und nehmen die Blätter wieder auseinander, trägt das erste A4-Blatt jetzt auf der Vorderseite (im Querformat) links eine "16" und links eine "1"; auf der Rückseite steht links die "2" und rechts die "15".

Um ein solches DIN-A5-Booklet auf der Kommandozeile zu erstellen, verwenden Sie zunächst psbook, um die Seiten richtig anzuordnen, und danach psnup, um zwei Seiten auf eine zu bringen:

$ psbook text.ps text_buch.ps
[16] [1] [2] [15] [14] [3] [4] [13] [12] [5] [6] [11] [10] [7] [8] [9]
Wrote 16 pages, 1630199 bytes
$ psnup -2 -d text_buch.ps text_buch_a5.ps
[1] [2] [3] [4] [5] [6] [7] [8] Wrote 8 pages, 1638216 bytes

Geschickt kombiniert

Das Schöne an Kommandozeilenprogrammen ist, dass Sie Befehle miteinander verketten können. So lässt sich das letzte Beispiel zum Erstellen eines A5-Booklets ganz einfach in einer Zeile schreiben:

psbook text.ps | psnup -2 -d > text_buch_a5.ps

Das Pipe-Zeichen reicht die Ausgabe des ersten Kommandos direkt an den psnup-Aufruf weiter; anschließend leitet der Operator > die Standardausgabe statt auf die Konsole in eine Datei um. Dabei legt er die Datei entweder an, oder überschreibt sie, falls sie schon existiert. Alternativ verwenden Sie den Operator >>. Er legt die Datei an, falls sie noch nicht existiert, oder hängt anderenfalls den Output an das File an.

Auch für den Einsatz in Shell-Skripten eignen sich alle hier vorgestellten Programme hervorragend. Selbst KDE-Benutzer, die lieber direkt aus den grafischen Programmen heraus drucken oder PostScript-Dateien generieren, müssen nicht in die Röhre schauen: Der KDE-Druckdialog bietet alle nötigen PSUtils-Kommandos als Filter an. Wer sich also mit den Kommandozeilen-Tools auskennt, hat leichtes Spiel bei der Konfiguration der Filter (Abbildung 6).

Abbildung 6: Die PSUtils werkeln auch bei KDE-Programmen unter der Haube und sorgen für ordentlichen Druck.

Infos

[1] Die GNU-a2ps-Homepage: http://www.infres.enst.fr/~demaille/a2ps/

[2] Die PSUtils auf freshmeat.net: http://freshmeat.net/projects/psutils/

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

Kommentare