web-dev-qa-db-ja.com

Ghostscript PDF / A変換が検証に失敗する

私は「ペーパーレス」ワークフローを開発しており、すべてのファイルをPDF/A-1b形式で保存する予定です。

PDF作成または受信したファイルをPDF/A-1bに変換するための簡単なバッチファイルを開発しようとしています。 この回答 から始めて、次のバッチファイル:

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

PDFA_def.psで、システムで見つけたものを含め、いくつかの異なるICCプロファイルを試しました。

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

およびsRGB_IEC61966-2-1_no_black_scaling.icc from color.org

私のテスト入力ファイルは、CutePDF 2.8(Ghostscript 8.15を使用)を使用してMicrosoft Outlook2010から印刷された1ページの電子メールです。

バッチファイルとGhostscript9.07で変換した後、AdobeReaderは出力がPDF/Aであると見なしますが、 pdf-tools.com によるPDF/A-1b検証は、「キーの値」というメッセージで失敗します。 Nは4ですが、3でなければなりません。」

これをPDF出力ファイルの次の構成にまでさかのぼります:

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

/N 4/N 3に変更すると、「キーNの値」メッセージが消えます。 /Nは、このヘッダーに続くストリーム内のオブジェクトの数を表しているようです。エンコードされたストリームの読み取り方法がわからないため、ストリームに何が含まれているのか、pdf-toolsが3つのオブジェクトのみを含む必要があると考える理由もわかりません。

同じくGhostscriptを使用するBullzipを使用して印刷されたPDF/Aも、「キーNは4ですが、3でなければなりません」というメッセージで検証に失敗します。

これは色空間と関係がありますか?私はそこに私の深さから外れています。 「プレーンな」sRGBスペースに満足していると思います。 Ghostsciptのドキュメントによると、PDF/Aエンコーディング CMYKである必要があります 。 Adobeは、PDF/Aの場合 RGBまたはCMYKのいずれかが機能する であることを意味します。そのため、適切な.iccプロファイルを見つける方法がわかりません。

または、バリデーターが間違っていて、すべてが正常である可能性がありますか?

5
Mark Berry

この バグレポート のGhostScript開発者の助けを借りて、私は/N問題を解決することができました。学んだ教訓:

  • 私の質問で参照されているGhostScriptドキュメントは古くなっています。現在のドキュメント ここ は、ProcessColorModel = DeviceRGBは問題ないと言っています。
  • ICCプロファイルは、色空間を記述します。有効な色空間には、GRAY、RGB、およびCMYKがあります。無料の ICC Profile Inspector を使用して、ICCプロファイルの色空間を確認できます。
  • 検証エラーの原因となるPDFファイルのセクションで、/Nは着色剤の数を表します。
  • PDFA_def.psファイルは/N値を出力します。 Ghostscript 9.07に含まれているサンプルは、/N 1(ProcessColorModel = DeviceGrayの場合)または/N 4(その他のProcessColorModelの場合)のみを出力します。
  • 私の元のテストでは、/N 4を引き起こすProcessColorModel = DeviceCMYKを指定しましたが、RGB色空間を記述するICCプロファイルを使用しました。バリデーターはこの不一致を正しく捉えました。私は4色を約束しましたが、3色しか説明していませんでした。

ディスプレイやオフィスプリンターで見つけたほとんどのICCプロファイルは、RGB色空間を表しています。 (CMYKは、ハイエンドの印刷機や特定の種類の用紙に固有のようです。)私の目的では、RGBの方が適しています。次のバッチファイルは、PDFファイルをRGB色空間の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

PDFA_def.psで、RGB色空間を記述するICCプロファイルを指定し、ICCプロファイルを定義するためのセクションを次のように変更します。

% Define an ICC profile :

[/_objdef {icc_PDFA} /type /stream /OBJ pdfmark
[{icc_PDFA} <</N systemdict /ProcessColorModel get /DeviceGray eq {1} {systemdict /ProcessColorModel get /DeviceRGB eq {3} {4} ifelse} ifelse >> /PUT pdfmark
[{icc_PDFA} ICCProfile (r) file /PUT pdfmark

長い行には、ProcessColorModel = DeviceRGBを検出し、適切な/N 3を発行するネストされたifelseステートメントが含まれています。結果のファイルは pdf-tools.com で検証に合格する必要があります。

更新:もう少し機能的なバッチプログラムを作成し、ブログ投稿で公開しました: Batch Convert PDF to PDF/A

7
Mark Berry

この問題がすでに修正されている場合に備えて、最初に最新の バージョン9.07 のghostscriptで問題を再テストすることをお勧めします。

これが役に立たない場合は、この問題に答えるのに本当のPDFの第一人者が必要です。この問題は、.psファイルの内容とパラメーターの競合に関係していると思われますgswin32cコマンドの。

ただし、問題のあるファイルはghostscriptによって生成されるため、開発者が質問に回答する ghostscript Bugzillaページ (登録が必要)に質問を投稿する権利があります。 ghostscriptのバグである場合、おそらく次のバージョンで修正されるでしょう。

投稿のような問題の説明に加えて、入力.psファイルの例と結果の.pdfファイルを添付する必要があります。それらのサイズを最小化するようにしてください。

過去に、私はそのフォーラムでいくつかの疑わしいghostscriptバグを報告し、常に十分に回答され、私が見つけた実際のバグはすべて修正されました。

3
harrymc