私は「ペーパーレス」ワークフローを開発しており、すべてのファイルを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プロファイルを見つける方法がわかりません。
または、バリデーターが間違っていて、すべてが正常である可能性がありますか?
この バグレポート のGhostScript開発者の助けを借りて、私は/N
問題を解決することができました。学んだ教訓:
/N
は着色剤の数を表します。/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 。
この問題がすでに修正されている場合に備えて、最初に最新の バージョン9.07 のghostscriptで問題を再テストすることをお勧めします。
これが役に立たない場合は、この問題に答えるのに本当のPDFの第一人者が必要です。この問題は、.psファイルの内容とパラメーターの競合に関係していると思われますgswin32cコマンドの。
ただし、問題のあるファイルはghostscriptによって生成されるため、開発者が質問に回答する ghostscript Bugzillaページ (登録が必要)に質問を投稿する権利があります。 ghostscriptのバグである場合、おそらく次のバージョンで修正されるでしょう。
投稿のような問題の説明に加えて、入力.psファイルの例と結果の.pdfファイルを添付する必要があります。それらのサイズを最小化するようにしてください。
過去に、私はそのフォーラムでいくつかの疑わしいghostscriptバグを報告し、常に十分に回答され、私が見つけた実際のバグはすべて修正されました。