Die Ghostscript-PDF / A-Konvertierung schlägt fehl

4739
Mark Berry

Ich entwickle einen "papierlosen" Workflow und plane, alle Dateien im PDF / A-1b-Format zu speichern.

Ich versuche, eine einfache Batchdatei für die Konvertierung von PDF-Dateien, die ich erstelle oder erhalte, in PDF / A-1b zu entwickeln. Ausgehend von dieser Antwort habe ich die folgende Batchdatei:

gswin32c ^ -dPDFA ^ -dNOOUTERSAVE ^ -sProcessColorModel=DeviceCMYK ^ -dUseCIEColor ^ -sDEVICE=pdfwrite ^ -o %2 ^ -dPDFACompatibilityPolicy=1 ^ "C:\Program Files (x86)\gs\gs9.07\mylib\PDFA_def.ps" ^ %1 

In PDFA_def.ps habe ich einige verschiedene ICC-Profile ausprobiert, einschließlich eines, das ich auf meinem System gefunden habe

C:/Windows/System32/spool/drivers/color/CalibratedDisplayProfile-5.icc 

und sRGB_IEC61966-2-1_no_black_scaling.iccvon color.org .

Meine Test-Eingabedatei ist eine 1-seitige E-Mail, die aus Microsoft Outlook 2010 mit CutePDF 2.8 (das Ghostscript 8.15 verwendet) gedruckt wird.

Nach der Konvertierung mit meiner Batch-Datei und Ghostscript 9.07 ist Adobe PDF der Ansicht, dass die Ausgabe PDF / A ist. Die PDF / A-1b-Validierung von pdf-tools.com schlägt jedoch mit der Meldung fehl: "Der Wert des Schlüssels N ist 4, muss jedoch 3 sein . "

Ich habe dies auf das folgende Konstrukt in der PDF-Ausgabedatei zurückgeführt:

<</Filter/FlateDecode /N 4/Length 2595>>stream 

Wenn ich zu wechsle /N 4, /N 3wird die Meldung "Wert des Schlüssels N" gelöscht. /Nstellt anscheinend die Anzahl der Objekte im Stream dar, die auf diesen Header folgen. Ich kann nicht den codierten Stream lesen, also verstehe ich weder, was er enthält, noch warum PDF-Tools meint, dass er nur 3 Objekte enthalten muss.

Ein mit Bullzip gedrucktes PDF / A, das ebenfalls Ghostscript verwendet, schlägt bei der Überprüfung mit der Meldung "Schlüssel N ist 4, aber 3" fehl.

Hat das etwas mit dem Farbraum zu tun? Ich bin da raus aus meiner Tiefe. Ich denke, ich würde mich über einen "einfachen" sRGB-Speicher freuen. Ghostscipt-Dokumente sagen, dass die PDF / A-Kodierung CMYK sein muss . Adobe impliziert, dass entweder RGB oder CMYK für PDF / A funktioniert . Daher ist mir unklar, wie man ein geeignetes .icc-Profil findet.

Oder vielleicht liegt der Validator falsch und alles ist in Ordnung?

5

2 Antworten auf die Frage

7
Mark Berry

Mit Hilfe eines GhostScript-Entwicklers in diesem Fehlerbericht konnte ich das /NProblem lösen . Gewonnene Erkenntnisse:

  • Das GhostScript-Dokument, auf das in meiner Frage verwiesen wird, ist veraltet. Das aktuelle Dokument hier sagt, dass ProcessColorModel = DeviceRGB in Ordnung ist.
  • ICC-Profile beschreiben einen Farbraum. Einige gültige Farbräume sind GRAU, RGB und CMYK. Sie können den Farbraum eines ICC-Profils mit dem kostenlosen ICC-Profilinspektor überprüfen .
  • In dem Abschnitt der PDF-Datei, der Validierungsfehler verursacht, wird /Ndie Anzahl der Farbstoffe angegeben.
  • Die Datei PDFA_def.ps gibt den /NWert aus. Das in Ghostscript /N 19.07 enthaltene Beispiel gibt nur aus (für ProcessColorModel = DeviceGray) oder /N 4(für jedes andere ProcessColorModel).
  • In meinem ursprünglichen Test wurde ProcessColorModel = DeviceCMYK angegeben, das verursacht wurde /N 4, aber ein ICC-Profil verwendet wurde, das einen RGB-Farbraum beschreibt. Die Prüfer haben diese Diskrepanz richtig erkannt: Ich habe 4 Farben versprochen, aber nur 3 beschrieben.

Die meisten ICC-Profile, die ich für Displays und Bürodrucker gefunden habe, beschreiben einen RGB-Farbraum. (CMYK scheint spezifischer für High-End-Druckmaschinen und bestimmte Papiersorten zu sein.) Für meine Zwecke ist RGB vorzuziehen. Die folgende Batchdatei konvertiert eine PDF-Datei mit einem RGB-Farbraum in PDF / A-1b:

gswin32c ^ -dPDFA ^ -dNOOUTERSAVE ^ -sProcessColorModel=DeviceRGB ^ -dUseCIEColor ^ -sDEVICE=pdfwrite ^ -o %2 ^ -dPDFACompatibilityPolicy=1 ^ "C:\Program Files (x86)\gs\gs9.07\mylib\PDFA_def.ps" ^ %1 

Geben Sie in PDFA_def.ps ein ICC-Profil an, das einen RGB-Farbraum beschreibt, und ändern Sie den Abschnitt zum Definieren eines ICC-Profils wie folgt:

% Define an ICC profile :  [/_objdef /type /stream /OBJ pdfmark [ <</N systemdict /ProcessColorModel get /DeviceGray eq ifelse} ifelse >> /PUT pdfmark [ ICCProfile (r) file /PUT pdfmark 

Die lange Zeile enthält eine verschachtelte ifelseAnweisung, die ProcessColorModel = DeviceRGB erkennt und die entsprechende Anweisung ausgibt /N 3. Die resultierende Datei sollte auf pdf-tools.com gültig sein .

Update: Ich habe ein etwas fähige Batch - Programm erstellt und veröffentlichte es in einer Blog - Post: Batch Convert PDF to PDF / A .

Ich habe gerade PDF-Tools verwendet und der einzige Validierungsfehler, den ich bekam, war "Der Wert des Schlüssels N ist 4, muss aber 3 sein." Sie können sich nicht vorstellen, wie glücklich ich bin, Ihre ausführliche Antwort hier zu lesen. Tausend Dank. Jan-Philip Gehrcke vor 9 Jahren 0
3
harrymc

Ich würde vorschlagen, Ihr Problem zuerst mit der neuesten Version 9.07 von Ghostscript zu testen, für den Fall, dass dieses Problem bereits behoben wurde.

Wenn dies nicht hilft, wird ein echter PDF-Guru benötigt, um dieses Problem zu lösen. Ich vermute, das Problem hat etwas mit einem Konflikt zwischen dem Inhalt der .ps-Datei und den Parametern des Befehls gswin32c zu tun.

Da die problematische Datei jedoch von Ghostscript generiert wird, haben Sie das Recht, Ihre Frage auf der Ghostscript-Bugzilla-Seite (Registrierung erforderlich) zu veröffentlichen, auf der die Entwickler Ihre Frage beantworten werden. Wenn es ein Fehler in Ghostscript ist, wird es höchstwahrscheinlich in der nächsten Version behoben.

Zusätzlich zur Problembeschreibung wie in Ihrem Beitrag sollten Sie eine .ps-Eingabedatei und die resultierende .pdf-Datei anhängen. Versuchen Sie, ihre Größe zu minimieren.

Ich habe in der Vergangenheit bereits mehrere vermutete Ghostscript-Fehler in diesem Forum gemeldet und wurde immer gut beantwortet, und die echten Fehler, die ich gefunden habe, wurden alle behoben.

Thanks for the reply. I may have confused things by mentioning that the the original was created by CutePDF 2.8, which uses GhostScript 8.15. However, the actual conversion that I'm trying to debug was done with GhostScript 9.07. I'm kind of surprised that PDF/A conversion hasn't been solved and verified already, but I haven't found a thorough tutorial. I may try the ghostscript forum. Mark Berry vor 11 Jahren 0
Denken Sie daran, dass dies kein benutzerorientiertes Forum ist, sondern eine Website für Fehlerberichte, die direkt und nur von den Entwicklern beantwortet wird. harrymc vor 11 Jahren 0
I decided, before submitting a bug, to download a trial of Adobe Acrobat XI. There, my test documents pass "pre-flight" PDF/A-1b validation. Does Ghostscript (and do others) tend to lean toward the Adobe interpretation of the standard? If so, there's probably no point in pursuing this as a bug. Mark Berry vor 11 Jahren 0
Nach Ihrer Meinung finden Produkte, die auf Ghostscript basieren, dies / N als nicht konform. Wenn Acrobat dies nicht erkennt, kann dies einfach ein Fehler im Acrobat-Checker sein. Bei meiner eigenen Lektüre der PDF-Spezifikationen habe ich / N in der Liste der rechtlichen Parameter für FlateDecode nicht gefunden, daher habe ich keine Ahnung, warum es überhaupt ausgegeben wird (Sie können versuchen, es zu löschen und zu sehen, ob das PDF noch funktioniert ). Sie müssen sich keine Sorgen machen, den Ghostscript-Entwicklern einen falschen Fehler zu präsentieren - ich habe das schon mehr als einmal gemacht und wurde immer mit Höflichkeit behandelt. harrymc vor 11 Jahren 0
Ich habe http://bugs.ghostscript.com/show_bug.cgi?id=693830 erstellt. Wie ich am besten sagen kann, ist / N kein FlateDecode-Parameter; vielmehr beschreiben "FlateDecode", "N" und "Length", wie der folgende "Stream" interpretiert werden soll. Das Acrobat-Tool "Interne PDF-Struktur" zeigt an, dass sich dieses Objekt unter OutputIntents> 0> DestOutputProfile befindet und dass der Stream ein ICC-Profilstream ist. Ich weiß jedoch noch nicht, was das / N bedeutet. Mark Berry vor 11 Jahren 0
Ich habe die PDF-Referenz nach allen Vorkommen von "N" durchsucht und habe keine, die auf Ihren Fall zutreffend scheint. Was also bleibt, ist auf die offizielle Antwort von Ghostscript zu warten. Bitte poste es hier. harrymc vor 11 Jahren 0
Ich sehe mehrere Instanzen von "/ N 3" und "/ N 4" in der [PDF 1.7-Referenz] (http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/de/devnet/ pdf / pdfs / PDF32000_2008.pdf). Es bezieht sich anscheinend auf die Anzahl der Objekte in einem Stream. Einige der Beispiele beziehen sich auf ICC-Farbprofile. Da CMYK 4 Farben und nur RGB 3 enthalten würde, besteht der Verdacht zwischen den beiden. Mark Berry vor 11 Jahren 0
/ N wurde nur für Farbprofile wirklich erwähnt. Haben Sie versucht, / N vollständig aus Ihrem PDF zu löschen, um zu sehen, ob es wirklich nützlich ist? harrymc vor 11 Jahren 0
Wenn ich / N lösche, wird die PDF-Datei in Adobe Reader geöffnet, es wird jedoch nur eine leere Seite angezeigt. Mark Berry vor 11 Jahren 0
Es ist also notwendig, wahrscheinlich weil der Stream ein eingebettetes Bild beschreibt. Ich habe gesehen, dass der Ghostscript-Entwickler in dem von Ihnen geöffneten Fehler geantwortet hat, dass / N = 4 ein CMYK-Farbprofil bedeutet, während / N = 3 RGB angibt und dass dies den Spezifikationen entspricht. Er hat höchstwahrscheinlich recht, wenn er sagt, es sei ein Fehler, wenn man es nicht akzeptiert. Dies ist nicht mein erstes Mal, dass das Ghostscript-Team die Spezifikationen besser kennt als andere Implementierer. harrymc vor 11 Jahren 0
Wenn Sie Ihre Bilder von CMYK in RGB konvertieren, wird das Problem möglicherweise behoben. harrymc vor 11 Jahren 0
Meine einfachste Testdatei enthält keine Bilder, aber durch Versuch und Irrtum habe ich gelernt, dass der ICC-Farbraum noch dem Wert von '/ N' entsprechen muss. Das in GS 9.07 enthaltene Beispiel für PDFA_def.ps behandelt DeviceRGB nicht korrekt, dh es gibt niemals '/ N 3' aus. Ich habe eine Antwort mit einer vorgeschlagenen Verbesserung für PDFA_def.ps gepostet. Mark Berry vor 11 Jahren 0
Harry, I appreciate your being a discussion partner on this question and pointing me to the Ghostscript bug site. I've marked your answer as helpful and created my own answer with the technical specifics I eventually worked out. I'm a bit confused about the bounty system. I was going to ask what you considered fair in this situation, but after reading the FAQ, it seems you may automatically get half the points (which is fine) and I'll lose the other half? The FAQ doesn't seem to cover the situation where the bounty drew an answer that was helpful but the accepted answered is by the asker. Mark Berry vor 11 Jahren 0
Die Regel der halben Reputation gilt nur, wenn es keine Lösung gibt. Sie hätten also die gesamte Prämie verloren. harrymc vor 11 Jahren 0
lassen Sie uns [diese Diskussion im Chat fortsetzen] (http://chat.stackexchange.com/rooms/8216/discussion-between-mark-berry-and-harrymc) Mark Berry vor 11 Jahren 0