PDF/Aを作りたい
LaTexを使って書いた書類をdvipdfmxなどでPDFに変換することがある.その場合に出力されたPDFファイルは大抵問題なく使えるが,たまにPDFファイルが特定の規格に準拠していることが求められる場合がある.
論文原稿がPDF/A準拠していることを求められた.Adobe Acrobatなどの有償ソフトウェアを使えばできるが,今回はオープンなソフトウェアでPDF/Aへの変換と準拠チェックを行う.
PDFファイルのPDF/A形式への変換手順
準備
Ghostscript
でできる.Homebrewでインストールされていることを前提にする.なければbrew install ghostscript
.
PDFを作る
Illustratorなどで作成する.今回はカラーモードをRGBで作成する.ICCプロファイルはAdobeRGB1998
を指定する.参考ページ
Ghostscriptの設定ファイルを作成する
Ghostscriptがインストールされているディレクトリに設定ファイルの雛形が置いてある.Homebrewでインストールしたので/usr/local/Cellar/ghostscript/9.23/share/ghostscript/9.23/lib/PDFA_def.ps
にあった.9.23
はバージョンによって異なるので注意.これを適当な場所にコピーして保存.
$ cd <some-directory>
$ cp /usr/local/Cellar/ghostscript/9.23/share/ghostscript/9.23/lib/PDFA_def.ps .
PDFA_def.ps
を編集.
%!
% This is a sample prefix file for creating a PDF/A document.
% Feel free to modify entries marked with "Customize".
% This assumes an ICC profile to reside in the file (ISO Coated sb.icc),
% unless the user modifies the corresponding line below.
% Define entries in the document Info dictionary :
/ICCProfile (AdobeRGB1998.icc) % Customise
def
[ /Title (Title) % Customise
/DOCINFO pdfmark
% Define an ICC profile :
[/_objdef {icc_PDFA} /type /stream /OBJ pdfmark
[{icc_PDFA}
<<
/N currentpagedevice /ProcessColorModel known {
currentpagedevice /ProcessColorModel get dup /DeviceGray eq
{pop 1} {
/DeviceRGB eq
{3}{4} ifelse
} ifelse
} {
(ERROR, unable to determine ProcessColorModel) == flush
} ifelse
>> /PUT pdfmark
[{icc_PDFA} ICCProfile (r) file /PUT pdfmark
% Define the output intent dictionary :
[/_objdef {OutputIntent_PDFA} /type /dict /OBJ pdfmark
[{OutputIntent_PDFA} <<
/Type /OutputIntent % Must be so (the standard requires).
/S /GTS_PDFA1 % Must be so (the standard requires).
/DestOutputProfile {icc_PDFA} % Must be so (see above).
/OutputConditionIdentifier (sRGB) % Customize
>> /PUT pdfmark
[{Catalog} <</OutputIntents [ {OutputIntent_PDFA} ]>> /PUT pdfmark
/ICCProfile (AdobeRGB1998.icc) % Customise
の部分が重要.
変換
以下のようなBashスクリプトで変換した.
#!/bin/bash
OUT=<path-to-output-file>.pdf
IN=<path-to-input-file>.pdf
# PS should be absolute path
PS=<path-to-PDFA_def.ps>
gs -dPDFA=1 \
-dBATCH \
-dNOPAUSE \
-dNOOUTERSAVE \
-sDEVICE=pdfwrite \
-sOutputICCProfile=AdobeRGB1998.icc \
-o ${OUT} \
${PS} \
${IN}
変換されたファイルがPDF/Aに準拠しているかどうかの判定
veraPDFが使える.READMEにしたがってインストールをすればverapdf-gui
, verapdf
が使えるようになる. verapdf-gui
はGUIのツールで,以下のようにファイルを選んでExecuteボタンを押せば結果を見ることができる.