Halbiert

Dass man Ghostscript nur unter Linux braucht, und zwar zum Drucken auf Nicht-PostScript-Druckern, ist ein Mythos. Man kann es auch für zahlreiche pfiffige Manipulationen an vorhandenen PDF-Dateien einsetzen.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 4 Min.
Von
  • Kurt Pfeifle
Inhaltsverzeichnis

Ein Linux-Kollege fragt: „Hier ist ein 12-seitiges PDF. Das Problem dabei: Es besteht aus gescannten Doppelseiten eines unserer Heftchen. Die hätte ich gerne hälftig zerlegt, weil ich mir daraus ein E-Book bauen will. Außerdem möchte ich rundum einen größeren Rand. Bekommt man das ohne teure Windows-Software hin?“ Ja, das geht. Mit Ghostscript – nicht nur unter Linux, sondern auch unter Windows, Mac OS X, Solaris …

Die Erstanalyse zeigt, dass das Original eine 24-seitige Broschüre war: als A3-Papierbögen bedruckt, in der Mitte gefaltet und per „Rückenstich“ geheftet. Zum Scannen hatte man die Heftklammern entfernt und die Einzelblätter per A3-Scanner eingelesen.

Die Lösung des vorliegenden Falls erfordert folgende Funktionen:

  • Zerlegen des PDFs in Einzelseiten
  • Übertragen der Seiteninhalte auf eine andere Mediengröße
  • Verschieben des Seiteninhalts auf dem Medium
  • Skalieren der Seiten

Ghostscript kann aus seinen Eingabedateien (PDF, PostScript, EPS) nicht nur viele Bildformate schreiben, sondern ist zudem ein vollständiger PostScript-Interpreter. Daher kann man über geeignete Kommandozeilenzugaben von PostScript-Code die Verarbeitung sogar von PDFs beeinflussen. Dazu gehören auch einige der jetzt benötigten Funktionen.

Zunächst wandelt man das originale A3-PDF in eines im A4-Format, das nur die linken Seitenhälften zeigt:

gswin32c.exe -o linke-Seiten-originalscan.pdf -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -g5950x8420 originalscan-12doppelseiten-A3.pdf 

Linux- und Mac-Benutzer verwenden gs statt gswin32c.exe. Der Parameter –g … gibt die angestrebte Mediengröße in Pixeln vor (für PDF rechnet Ghostscript mit 720 dpi statt 72 dpi – daher entsprechen 5950 x 8420 Pixel den 595 x 842 PostScript-Punkten einer A4-Seite.)

Das Zwischenergebnis zeigt nur noch die linken Hälften der ursprünglichen Seiten. Als Nächstes muss man für die Sichtbarkeit der rechten Hälften sorgen:

gswin32c.exe -o rechte-Seiten-originalscan.pdf -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -g5950x8420 -c "<</PageOffset [-595 0]>> setpagedevice" -f originalscan-12doppelseiten-A3.pdf 

Hinter dem Schalter –c nimmt Ghostscript Schnipsel von in sich abgeschlossenem PostScript-Code entgegen. Diese Anweisungen befolgt es bei seinen folgenden Verarbeitungsschritten.

Dabei bewirkt das Statement </PageOffset [-595 0]> setpagedevice ein Verschieben der Seiteninhalte um 595 PostScript-Punkte (also eine A4-Breite) nach links. Die Zugabe von –c muss immer als letzter Parameter erfolgen, die Angabe des Inputs ist dann zusätzlich per –f abzugrenzen.

Jedes der beiden Ergebnis-PDFs ist noch genauso groß wie die Originaldatei. Der Grund: Alle Seiteninhalte sind weiterhin materiell präsent in beiden Dateien – es ist allerdings jeweils nur die eine Hälfte sichtbar.

Seit dem aktuellen Release 9.05 beherrscht auch der PDF-Ausgabekanal eine Syntax, die pro Input-Seite im Output eine neue Datei schreibt. Vor 9.05 funktionierte dies nur für die Ausgabe von Bildformaten (TIFF, PNG, JPEG, …) und EPS, nicht jedoch für PDF:

-o dateiname_%03d.pdf 

Über den Platzhalter %03d im Namen der Ausgabedatei zählt Ghostscript die entsprechenden Seitenzahlen dreistellig mit führenden Nullen hoch: 001, 002, 003 …

Immer wenn man über die minimal funktionierende Kommandozeile keine Zusatzanforderungen stellt, zieht Ghostscript seine eingebauten Voreinstellungen zurate. In der Regel sind diese bei der PDF-zu-PDF-Konvertierung durchaus vernünftig, sodass dieser Text sie für den Augenblick akzeptiert. Die Minimal-Ghostscript-Kommandos sehen, bei Verwendung „sprechender“ Dateinamen, so aus:

gswin32c.exe -o Seite-rechts-%03d-originalscan.pdf -sDEVICE=pdfwrite rechte-Seiten-originalscan.pdf 
gswin32c.exe -o Seite-links-%03d-originalscan.pdf -sDEVICE=pdfwrite linke-Seiten-originalscan.pdf 

In einer Textdatei notiert man die Namen der Einzelseiten-PDFs aus dem letzten Schritt in genau der für die Gesamtdatei benötigten Reihenfolge. Im finalen Job füttert man Ghostscript mit mehreren Dateien, die es im Ergebnis-PDF hintereinander hängt:

gswin32c.exe -o umsortiert-24einzelseiten-A4.pdf -sDEVICE=pdfwrite $(cat reihenfolge.txt) 

Über den Listing-Service der iX (siehe „Alle Links“) gibt es ein Skript, dass die beschriebenen Schritte automatisiert. Was zum E-Book des Kollegen jetzt noch fehlt, sind skalierte Seiten und ein breiterer Rand. iX bringt dazu demnächst mehr.

ist Freelancer und Spezialist für alle Themen rund ums Drucken. Er setzt zwar nicht ausschließlich, aber am liebsten freie Software ein.

Alle Links: www.ix.de/ix1209154 (avr)