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.

Kommentare:

Anonym hat gesagt…

Danke für den Tipp. In der Ghostscript-Version 8.54 konnte ich die Datei finden, in Version 8.64 allerdings nicht mehr.

Anonym hat gesagt…

so findest du sie wieder:

find / -name "gs_pdfwr.ps" -print 2>/dev/null

-oli- hat gesagt…

...oder halt mit

locate gs_pdfwr.ps

Geht wesentlich schneller, es muss aber das entsprechende Paket (slocate?) installiert sein...

-oli-

Anonym hat gesagt…

Unter Windows gibt es in Ghostscript 8.71 diese Datei nicht mehr.

Hab jetzt die 8.61 installiert und die gs_pdfwr.ps nach Anleitung editiert.

Jetzt geht es :-)

Vielen Dank

Anonym hat gesagt…

Vielen Dank für deinen Blog-Eintrag!!!!
Echt klasse!
Ich habe es gerade probiert mit GS8.54 und Freepdf.

Habe ewig lang danach gesucht und
endlich gefunden :-)

Anonym hat gesagt…

Wie auch die anderen feststellte, funktioniert dieser Trick in den neueren Versionen von GhostScript nicht.

Man könnte zwar eine ältere verwenden, aber es ist sinnvoller die jeweils neuste zu benutzen.

Kannst du für die neueren Versionen auch einen Tipp geben, wie man dort das Problem lösen kann?

-oli- hat gesagt…

a) Es ist kein Problem, unter Windows mehrerer GhostScript-Versionen (in eigene Ordner) parallel zu installieren. Die zu verwendende Version muss dann im Suchpfad sein.

b) Ich habe es noch nicht geschafft, die Rumborak-Tools (Version 1.0RC) mit GhostScript 8.71 zum Laufen zu bekommen.

c) Man kann die erstellte PS-Datei vor der Umwandlung in PDF mit einem Texteditor so bearbeiten, dass der Schutz nicht mehr greift und die Umwandlung mit ps2pdf problemlos funktioniert. Allerdings ist das (zumindest in den USA) "illegal" (einfach mal nach diesem Wort in der PS-Datei suchen!!).

Viele Grüße,

-oli-

Anonym hat gesagt…

Danke! Eigentlich schreibe ich schon lange nix mehr im Netz. Hier gibts die Ausnahme ;-) Dank dieses Tipps konnte ich mein Handling bzgl. der Generierung einzelner PDF-Seiten von "Hardcopy" nach "gs (version asba** uralt)" endlich aktualisieren. Antiquiert aber effektiv :-)
Pi

Anonym hat gesagt…

Danke für diesen Tipp, habe es gerade mit ghostscript vers. 8.71 getestet, funktioniert einwandfrei :-)

Hans-Peter Broschart hat gesagt…

Funktioniert auch mit dem aktuellen ghostscript v9.04. Dort heißt der pswriter allerdings IsDistiller.

Anonym hat gesagt…

Vielen Dank!!!

Es geht auch mit PDF24 einfach der Beschreibung oben folgen...

Anonym hat gesagt…

Danke danke danke!
Getestet mit gs 9.05.
An Stelle von pdfwrite muss man einfach IsDistiller ersetzen. Am einfachsten findet man die richtige Stelle über den Kommentar.

Jetzt kann ich ein Vorlesungsskript endlich um die Seiten reduzieren, die nicht zu lernen sind...