Dienstag, 31. März 2009

"Drucken" bestimmter PDFs nach PDF

Versucht man, mit Hilfe des Adobe Readers (formerly known as Acrobat Reader) bestimmte PDFs oder Auszüge davon auf einem Druckertreiber, der wiederum PDFs generiert (z.B. Rumboraks PDF-Writer Plus) auszugeben, erhält man nur eine leere Seite. Der Grund dafür scheint zu sein, dass im vom Adobe Reader erzeugten PostScript-Code eine Art Abfrage eingebaut ist, ob gerade ein PDF erzeugt wird. Geht man den Weg manuell, indem man erst mit Hilfe eines PS-Druckertreibers in eine PS-Datei druckt und diese anschließend mit dem GhostScript-Tool ps2pdf nach PDF wandelt, erhält man bei letzterem Schritt die folgende Fehlermeldung:
%%[ ProductName: GPL Ghostscript ]%%
This PostScript file was created from an encrypted PDF file.
Redistilling encrypted PDF is not permitted.
%%[ Error: undefined; OffendingCommand: eexec ]%%
GPL Ghostscript 8.62: Unrecoverable error, exit code 1
Abhilfe kann geschaffen werden, indem man die Datei gs_pdfwr.ps im Installationsverzeichnis von GhostScript (oder unterhalb von /usr/share/ghostscript/) öffnet, und folgende Stelle sucht:
% Patch 'where' so that the distiller operators are only visible
% if the pdfwrite device is the current one.
{ currentdevice .devicename dup /pdfwrite eq exch /ps2write eq or{
.where
Dort ersetzt man "/pdfwrite" durch irgend etwas unbrauchbares, z.B. "/pdfxxxxwrite":
{ currentdevice .devicename dup /pdfxxxxwrite eq exch /ps2write eq or{
und speichert die Datei unter dem selben Namen am gleichen Ort ab.

Ein darauf hin aufgerufenes ps2pdf verrichtet dann klaglos seinen Dienst, ebenso ein installierter GhostScript-basierter PDF-Druckertreiber.