2017-10-03 4 views
1

Ich möchte mit dem Verständnis vorausschicken, dass ich mit Legacy-Code arbeite und somit mit weniger als idealen Situationen leben muss und deswegen ein paar skurrile Sachen mache. Bis ich die Genehmigung zum Neuschreiben bekommen kann, muss ich mich zur Rechenschaft ziehen.PostScript - Fehler bei der Verwendung von Ghostscript "pdfwrite"

Kontext

Hier ist meine Situation. Die Anwendung ist insofern "einfach", als sie von einer SQL-Datenbank berichtet. Zum Guten oder zum Schlechten baut er seine Berichte mit Postscript auf. Es verwendet Ghostscript-DLLs, in die es in das Anwendungsverzeichnis eingebettet ist. Hier ist der Kicker, es wurde angefordert, dass ich SSIS-Berichte einschließe, deren Ausgabe bereits im PDF-Format vorliegt. Aus Kompatibilitätsgründen muss ich diese PDFs in Postscript konvertieren, obwohl sie in den meisten Situationen später wieder in PDF konvertiert werden. Ich weiß, das ist wahrscheinlich schlechtes Design, aber es gibt bestimmte Funktionen, die dies erfordern und es ist einfach das, was es vorerst ist. Ich verwende GhostScript, um die Konvertierungen zu verarbeiten.

beobachtetem Verhalten Das folgende Verhalten ist das, was beobachtet wird, wenn die PDF PS umgewandelt wird, durch die Anwendung übergeben und dann wieder zurück in PDF konvertiert.

Bei der Verwendung von "sDevice = Pswrite" funktioniert alles, außer dass die Berichte mit schlechter Auflösung kompiliert werden, obwohl ich die Auflösung Option tweek.

Wenn Sie "sDevice = ps schreiben" verwenden, was ich als das aktuell akzeptierte Protokoll verstehe, wird das PDF nicht gerendert und erzeugt den folgenden Fehler.

Der obige Fehler tritt nur auf, wenn ein Bericht von einem Berichtsserver verwendet wird, auf den über den Webclient zugegriffen wird. Ich kann bestätigen, dass die PDF-Datei erfolgreich zurückgegeben wird und nicht beschädigt ist.

Wenn lokale SSIS-Pakete in der Anwendung ausgeführt werden, kann das erstellte PDF erfolgreich verarbeitet werden.

Wenn die ursprüngliche PDF PS mit PS2Write die Kommentare umgewandelt werden bevölkert wie folgt

%!PS-Adobe-3.0 
%%BoundingBox: 0 0 612 792 
%%Creator: GPL Ghostscript 905 (ps2write) 
%%LanguageLevel: 2 
%%CreationDate: D:20171003154139-05'00' 
%%Pages: 3 
%%EndComments 

pswrite produziert

%!PS-Adobe-3.0 
%%Pages: (atend) 
%%BoundingBox: 21 30 761 576 
%%HiResBoundingBox: 21.600000 30.400000 760.566016 575.100000 
%..................................... 
%%Creator: GPL Ghostscript 905 (pswrite) 
%%CreationDate: 2017/10/03 15:53:40 
%%DocumentData: Clean7Bit 
%%LanguageLevel: 2 
%%EndComments 
%%BeginProlog 

Suspicion

ich den Verdacht, dass entweder die PDF befindet sich in einem inkompatiblen Standard, der nicht in PostScript konvertiert werden kann. Zum Beispiel eine neuere PDF-Version, die nicht verarbeitet werden kann. Oder vielleicht enthält es etwas, das nicht kompatibel ist, wie eine Schriftart oder ein Bild.

Gibt es trotzdem, um dies sicher zu jagen? Ist jemand auf ähnliche Situationen gestoßen und was war die Lösung? Irgendwelche Hinweise darauf, in was hinein zu schauen oder Dinge zu versuchen?

+0

Können Sie die vollständigen Befehle, die für Konvertierungen in beide Richtungen verwendet werden, posten? – milivojeviCH

Antwort

3

Um ehrlich zu sein, wird wahrscheinlich niemand in der Lage sein zu helfen, ohne die ursprüngliche PDF-Datei zu sehen. Selbst eine Dummy-Datei ist in Ordnung, vorausgesetzt, sie weist den Fehler auf.

Aber das erste, was Ihnen in den Sinn kommt, ist, dass Sie Ghostscript 9.05 zu verwenden scheinen. Das ist jetzt 5 Jahre alt, die aktuelle Version ist (bald) 9.22.Es gab zahlreiche Fixes zu ps2write in dieser Zeit, mindestens 50 oder mehr, und die erste Sache, die ich vorschlagen würde, ist upgrade und sehen, ob das Problem weggeht.

Zweitens war Ihnen nicht klar, warum Sie die PDF-Dateien in PostScript konvertieren müssen. Wenn Sie diese nur zusammen mit etwas zusätzlichem PostScript über Ghostscript einspeisen, um die Assemblage in PDF zu konvertieren, müssen Sie die PDF-Dateien nicht zuerst in PostScript umwandeln. Ghostscript ist durchaus in der Lage, eine Mischung aus PDF- und PostScript-Dateien zu verwenden, sodass Sie die PDF-Datei einfach zwischen die PostScript-Ausgabe Ihrer SQL-Ausgabe einfügen können, um eine einzelne kombinierte PDF-Datei zu erstellen.

Dies hat eine Reihe von Vorteilen; Zuerst und am offensichtlichsten, sollten Sie Ihr Konvertierungsproblem nicht bekommen. Zweitens bedeutet jedes Konstrukt in der PDF-Datei, das nicht in PostScript dargestellt werden kann (z. B. Transparenz), dass der Inhalt zu einem Bild gerendert wird und das PostScript einfach eine große Bitmap enthält. Genau wie die pswrite-Ausgabe bedeutet die Vermeidung der Konvertierung, dass dies nicht geschieht. Drittens wird es schneller als zuerst alle PDF-Dateien in PostScript konvertieren.

Wenn Sie das absolut nicht tun können, dann würde ich versuchen, den aktuellen Code und sehen, ob es besser ist. Wenn nicht, dann haben Sie einen Fehler gefunden und ich würde vorschlagen, dass Sie ihn unter https://bugs.ghostscript.com melden. Sie müssen jedoch eine Beispieldatei und eine Befehlszeile angeben können.

+0

Ich habe zwei Dinge getan, die meiner Meinung nach einen Unterschied gemacht haben. 1) Ich habe ein Update auf 9.22 2) Ich habe nicht realisiert, dass Sie PDF und PostScript in GhostScript mischen können, um eine einzige Ausgabe zu erzeugen! Das hat den Trick gemacht. – LCaraway

Verwandte Themen