LuaLaTeX で PDF/A を構成する
今回は $\mathrm{Lua\LaTeX}$ で PDF/A を構成してみる。
PDF/A とは
PDF/A とは自己完結性と永続性を考慮した PDF 構成で, ISO 19005 シリーズとして定義されている。 PDF/A の種別は大まかに
- PDF/A-1 : ISO 19005-1 (PDF 1.4 相当)
- PDF/A-1a : PDF/A-1 レベルA
- PDF/A-1b : PDF/A-1 レベルB
- PDF/A-2 : ISO 19005-2 (PDF 1.7 相当)
- PDF/A-2a : PDF/A-2 レベルA
- PDF/A-2b : PDF/A-2 レベルB
- PDF/A-2u : PDF/A-2 レベルU
- PDF/A-3 : ISO 19005-3 (PDF/A-2 拡張)
- PDF/A-3a : PDF/A-3 レベルA
- PDF/A-3b : PDF/A-3 レベルB
- PDF/A-3u : PDF/A-3 レベルU
といった感じに分かれている。
まず PDF/A-1 については
- カラーの再現性の保証
- フォント埋め込み
- XMPメタデータの埋め込み
が要求され,逆に暗号化によるアクセス制限やコードの埋め込み等は禁止されている。
PDF/A-2 では PDF/A 文書の添付や圧縮機能の一部などが許容されている。 更に PDF/A-3 では任意のドキュメント・データの埋め込みが許容されているが,さすがにこれは自己完結性の観点からは要らない機能と言えるだろう。
これらの条件に加えてレベルUでは ToUnicode CMap による Unicode 対応が要求され(テキスト抽出等に必要),最高レベルのAではタグによる論理構造の埋め込みも要求される。
論理構造の埋め込みはちょっと辛いし(論理構造をきちんと設計するのは大変)そもそも今回使用する pdfx
パッケージではレベルAの要求を完全には満たせないらしいので,レベルBまたはUの PDF/A を構成することを考える。
最初の LuaLaTeX テキスト
手始めに以下の $\mathrm{Lua\LaTeX}$ テキストを用意してみる。
\documentclass{ltjsarticle}
\usepackage[deluxe,nfssonly]{luatexja-preset}
\renewcommand{\emph}[1]{\textsf{\textgt{#1}}} % 強調をゴシック体と Sans Serif に変更する
\title{\emph{はじめてのLua\TeX-ja}}
\author{Spiegel}
\date{2020-06-08}
\begin{document}
\maketitle
\section{はじめてのLua\TeX-ja}
ちゃんとLua\TeX-jaで日本語が出るかな?
\subsection{出たかな?}
長い文章を入力するとちゃんと右端のところで折り返されるかな?
大丈夫そうな気がするけど.ちょっと不安だけど何事も挑戦だよね.
\end{document}
これを処理した結果がこんな感じ。
ちなみに pdfinfo
で中身を見ると,こんな感じになっている1。
$ pdfinfo sample.pdf
Creator: TeX
Producer: LuaTeX-1.12.0
CreationDate: Mon Jun 8 20:36:09 2020 JST
ModDate: Mon Jun 8 20:36:09 2020 JST
Tagged: no
UserProperties: no
Suspects: no
Form: none
JavaScript: no
Pages: 1
Encrypted: no
Page size: 595.276 x 841.89 pts (A4)
Page rot: 0
File size: 26856 bytes
Optimized: no
PDF version: 1.5
PDF version が 1.5 である点に注目。
pdfx パッケージとメタデータの追加
PDF/A を構成するために pdfx
パッケージとメタデータを追加する。
こんな感じ。
% XMPメタデータ
\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.xmpdata}
\Title{はじめてのLuaTeX-ja}
\Subject{ちゃんとLuaTeX-jaで日本語が出るかな?}
\Author{Spiegel}
\end{filecontents*}
\documentclass{ltjsarticle}
\usepackage[deluxe,nfssonly]{luatexja-preset}
\renewcommand{\emph}[1]{\textsf{\textgt{#1}}} % 強調をゴシック体と Sans Serif に変更する
\usepackage[a-2u]{pdfx} % PDF/A-2u を構成
\pdfvariable omitcidset=1 % LuaTeX で PDF/A-2 を作る際に必要
\title{\emph{はじめてのLua\TeX-ja}}
\author{Spiegel}
\date{2020-06-08}
\begin{document}
...
XMPメタデータの指定を \documentclass
の前に記述するのがポイント。
これを処理して中身を見るとこんな感じになった。
$ pdfinfo sample.pdf
Title: はじめてのLuaTeX-ja
Subject: ちゃんとLuaTeX-jaで日本語が出るかな?
Author: Spiegel
Creator: LaTeX with hyperref
Producer: LuaTeX
CreationDate: Mon Jun 8 20:36:09 2020 JST
ModDate: Mon Jun 8 20:36:09 2020 JST
Tagged: no
UserProperties: no
Suspects: no
Form: none
JavaScript: no
Pages: 1
Encrypted: no
Page size: 595.276 x 841.89 pts (A4)
Page rot: 0
File size: 40669 bytes
Optimized: no
PDF version: 1.4
PDF subtype: PDF/A-2u:2010
Title: ISO 19005 - Electronic document file format for long-term preservation (PDF/A)
Abbreviation: PDF/A-2
Subtitle: Part 2: Use of ISO 32000-1
Standard: ISO 19005-2
Conformance: Level U, Unicode support
Title, Subject, および Author のメタデータが追加され, PDF version が 1.4 の PDF/A-2u として構成されているのが分かる。
pdfx パッケージのオプション
pdfx
パッケージでは PDF/E や PDF/X 等も構成できるが,ここでは PDF/A のオプションに限って紹介しておく。
オプション | 構成 |
---|---|
a-1a |
PDF/A-1a : ただし不完全 |
a-1b |
PDF/A-1b |
a-2a |
PDF/A-2a : ただし不完全 |
a-2b |
PDF/A-2b |
a-2u |
PDF/A-2u |
a-3a |
PDF/A-3a : ただし不完全 |
a-3b |
PDF/A-3b |
a-3u |
PDF/A-3u |
レベルAは使わないほうがいいだろう(笑) 一般的には最小構成の PDF/A-1b で十分なようだ。
ただし pdfx
パッケージはレベルB指定でも ToUnicode CMap を埋め込んだままにするらしいので,今回のように,敢えて PDF/A-2u にする手もある。
pdfx パッケージで設定可能な XMP メタデータ項目
filecontents
環境
\begin{filecontents*}{\jobname.xmpdata}
...
\end{filecontents*}
内に記述する XMP メタデータ項目のうち,主なものは以下の通り。
項目名 | XMP 要素 | 備考 |
---|---|---|
\Author |
dc:creator |
\sep で複数指定可能 |
\Title |
dc:title |
|
\Language |
dc:language |
ja-JP など,\sep で複数指定可能 |
\Keywords |
dc:subject |
\sep で複数指定可能 |
\Publisher |
dc:publisher |
\sep で複数指定可能 |
\Subject |
dc:description |
著作権情報を載せる場合には以下の項目も使える2。
項目名 | XMP 要素 | 備考 |
---|---|---|
\Copyright |
dc:rights |
利用規約等 |
\CopyrightURL |
xmpRights:WebStatement |
|
\Copyrighted |
xmpRights:Marked |
公有の場合は False をセットする |
\Owner |
xmpRights:Owner |
著作権者が別にいる場合,\sep で複数指定可能 |
\CertificateURL |
xmpRights:Certificate |
|
\Date |
dc:date |
YYYY-MM-DD または YYYY-MM |
\Relation |
dc:relation |
|
\URLlink |
dc:identifier |
その他,設定可能な項目については pdfx
パッケージのドキュメントを参照のこと。
なお filecontents
環境の内容は *.xmpdata
ファイルに吐き出されるが,既にファイルがある場合は上書き保存されないため,メタデータを変更したらこのファイルを削除してから再処理する必要がある。
もし .latexmkrc
ファイルでビルドの制御を行っているなら
$clean_ext = "xmpdata";
の記述を追加することで
$ latexmk -c
コマンドで,他の一時ファイルと共に *.xmpdata
ファイルも削除してくれる。
実際に PDF ファイルに埋め込まれる XMP メタデータの内容は pdfa.xmpi
に出力されているので参考になると思う。
また,すでに生成済みの PDF に対しては
$ pdfinfo -meta sample.pdf
で XMP メタデータを抽出できる。
日本語の ToUnicode CMap はなくても大丈夫(らしい)
レベルUの要件として PDF に ToUnicode CMap が埋め込まれている必要があるが,原ノ味フォントのような Adobe-Japan1 フォントについては例外のようだ。
試しに pdf-rm-tuc
コマンドで原ノ味フォントの ToUnicode CMap を削除してみる3。
$ pdf-rm-tuc --newline-before-endstream sample.pdf sample-tuc.pdf
PDF/A ドキュメントを処理する場合は --newline-before-endstream
オプションが必須になるらしいので注意。
これで
$ pdffonts sample-tuc.pdf
name type encoding emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
JKVWEI+LMRoman10-Regular CID Type 0C Identity-H yes yes yes 22 0
IECCEF+HaranoAjiMincho-Regular CID Type 0C Identity-H yes yes no 23 0
XKBUGM+LMSans17-Regular CID Type 0C Identity-H yes yes yes 24 0
JYWTWW+HaranoAjiGothic-Regular CID Type 0C Identity-H yes yes no 25 0
RHMEBC+LMRoman12-Regular CID Type 0C Identity-H yes yes yes 26 0
RHDCZK+LMSans12-Regular CID Type 0C Identity-H yes yes yes 27 0
$ pdfinfo sample-tuc.pdf
Title: はじめてのLuaTeX-ja
Subject: ちゃんとLuaTeX-jaで日本語が出るかな?
Author: Spiegel
Creator: LaTeX with hyperref
Producer: LuaTeX
CreationDate: Mon Jun 8 20:36:09 2020 JST
ModDate: Mon Jun 8 20:36:09 2020 JST
Tagged: no
UserProperties: no
Suspects: no
Form: none
JavaScript: no
Pages: 1
Encrypted: no
Page size: 595.276 x 841.89 pts (A4)
Page rot: 0
File size: 39154 bytes
Optimized: no
PDF version: 1.4
PDF subtype: PDF/A-2u:2010
Title: ISO 19005 - Electronic document file format for long-term preservation (PDF/A)
Abbreviation: PDF/A-2
Subtitle: Part 2: Use of ISO 32000-1
Standard: ISO 19005-2
Conformance: Level U, Unicode support
のように PDF/A-2u を維持しつつ原ノ味フォントの ToUnicode CMap を削除することができた。 念のため,この PDF ファイルを veraPDF で検査してみたが “PDF/A-2U validation profile” でちゃんとパスしたので本当に問題ないのだろう。
さらに pdf-rm-tuc
コマンドに --linearize
および --object-streams=generate
オプションを付けて実行すると
$ pdf-rm-tuc --newline-before-endstream --linearize --object-streams=generate sample.pdf sample-tuc.pdf
PDF version 1.5 のドキュメントとして出力される。
$ pdfinfo sample-tuc.pdf
Title: はじめてのLuaTeX-ja
Subject: ちゃんとLuaTeX-jaで日本語が出るかな?
Author: Spiegel
Creator: LaTeX with hyperref
Producer: LuaTeX
CreationDate: Mon Jun 8 20:36:09 2020 JST
ModDate: Mon Jun 8 20:36:09 2020 JST
Tagged: no
UserProperties: no
Suspects: no
Form: none
JavaScript: no
Pages: 1
Encrypted: no
Page size: 595.276 x 841.89 pts (A4)
Page rot: 0
File size: 34742 bytes
Optimized: yes
PDF version: 1.5
PDF subtype: PDF/A-2u:2010
Title: ISO 19005 - Electronic document file format for long-term preservation (PDF/A)
Abbreviation: PDF/A-2
Subtitle: Part 2: Use of ISO 32000-1
Standard: ISO 19005-2
Conformance: Level U, Unicode support
よーし,うむうむ,よーし。
ブックマーク
参考図書
- [改訂第8版]LaTeX2ε美文書作成入門
- 奥村晴彦 (著), 黒木裕介 (著)
- 技術評論社 2020-11-14
- 大型本
- 4297117126 (ASIN), 9784297117122 (EAN), 4297117126 (ISBN)
- 評価
2020年末に第8版が出てたのに気付かなかったよ。可能なら紙の本も買って常に側に置いておくのが吉。版元には PDF 版もある。
-
pdfinfo
およびpdffonts
は Poppler のコマンド。 Windows 版 TeX Live には既定で同梱されているらしい。他のプラットフォームについては「Poppler - TeX Wiki」を参考に導入すればいいだろう。 ↩︎ -
基本的に © マークや “Copyright” の文言は不要。その代わり著作(権)者名と公開年と許諾条件を表記するとよい(他のメタデータで代替できるのであればそれも不要だが)。 CC Licenses のようなライセンス・ツールを使うのであれば
\CopyrightURL
項目に(コモンズ証などの)許諾条件を記した Web ページの URL をセットすればよい。なお CC Licenses について詳しくは拙文「改訂3版: CC Licenses について」を参考にどうぞ。 PDF/A はアクセス制限を禁止するので CC Licenses と相性がいいよね♪ ↩︎ -
pdf-rm-tuc
コマンドの導入については拙文「LuaTeX で生成した PDF から ToUnicode CMap を除去する」を参考にどうぞ。 ↩︎