1 <?xml version="1.0" encoding="UTF-8"?>
3 <!-- EN-Revision: 20872 -->
4 <sect1 id="zend.pdf.info">
5 <!-- @todo review and revise upon completion of refactoring -->
6 <title>ドキュメントの情報およびメタデータ</title>
8 <acronym>PDF</acronym> ドキュメントには、そのドキュメントに関する情報
9 (たとえばタイトルや作者、作成日、更新日など)
13 歴史的に、この情報は特別な Info 構造体に格納されるようになっています。
14 この構造体を読み書きするには、<classname>Zend_Pdf</classname> オブジェクトの public プロパティ
15 <code>properties</code> の連想配列を使用します。
16 <programlisting language="php"><![CDATA[
17 $pdf = Zend_Pdf::load($pdfPath);
19 echo $pdf->properties['Title'] . "\n";
20 echo $pdf->properties['Author'] . "\n";
22 $pdf->properties['Title'] = 'New Title.';
28 <acronym>PDF</acronym> v1.4 (Acrobat 5) の標準規格では、次のようなキーが定義されています。
33 <emphasis>Title</emphasis> - 文字列 (任意)。ドキュメントのタイトル。
38 <emphasis>Author</emphasis> - 文字列 (任意)。
44 <emphasis>Subject</emphasis> - 文字列 (任意)。
50 <emphasis>Keywords</emphasis> - 文字列 (任意)。
56 <emphasis>Creator</emphasis> - 文字列 (任意)。
57 他の形式から <acronym>PDF</acronym> に変換されたドキュメントである場合に、
58 変換元のドキュメントを作成したアプリケーションの名前
59 (たとえば Adobe FrameMaker®) が格納されます。
64 <emphasis>Producer</emphasis> - 文字列 (任意)。
65 他の形式から <acronym>PDF</acronym> に変換されたドキュメントである場合に、
66 <acronym>PDF</acronym> への変換に使用したアプリケーションの名前
67 (たとえば Acrobat Distiller) が格納されます。
72 <emphasis>CreationDate</emphasis> - 文字列 (任意)。
74 "D:YYYYMMDDHHmmSSOHH'mm'" 形式で表したもの。
78 <emphasis>YYYY</emphasis> は年です。
83 <emphasis>MM</emphasis> は月です。
88 <emphasis>DD</emphasis> は日 (01–31) です。
93 <emphasis>HH</emphasis> は時 (00–23) です。
98 <emphasis>mm</emphasis> は分 (00–59) です。
103 <emphasis>SS</emphasis> は秒 (00–59) です。
108 <emphasis>O</emphasis> は地方時と標準時 (UT)
109 との関連です。+, −, あるいは Z で表します
115 <emphasis>HH</emphasis> の後に ' を続けたものは、
116 UT との時差 (時) の絶対値 (00–23) です。
121 <emphasis>mm</emphasis> の後に ' を続けたものは、
122 UT との時差 (分) の絶対値 (00–59) です。
126 HH および mm の後に続くアポストロフィ (') は、それぞれのパーツの一部となります。
127 年以外のすべてのフィールドはオプションです (先頭の D: もオプションですが、
128 これは省略しないことを強くお勧めします)。MM と DD のデフォルト値はともに
129 01 で、その他のすべての数値フィールドのデフォルト値はゼロです。
130 O フィールドのプラス記号 (+) は、地方時が UT より遅れていることを表し、
131 マイナス記号 (−) は地方時のほうが UT より進んでいることを表します。
132 UT 情報を省略した場合は、その時刻と UT との関係は未知となります。
133 タイムゾーンの指定の有無にかかわらず、日付は地方時で指定しなければなりません。
136 たとえば、太平洋標準時の 1998 年 12 月 23 日午後 7 時 52 分は、
137 "D:199812231952−08'00'" となります。
142 <emphasis>ModDate</emphasis> - 文字列 (任意)。
144 <emphasis>CreationDate</emphasis> と同じ。
149 <emphasis>Trapped</emphasis> - boolean (任意)。
150 ドキュメントにトラッピング情報を含むよう修正されているかどうか。
154 <emphasis><constant>TRUE</constant></emphasis> - ドキュメントは完全にトラッピングされています。
160 <emphasis><constant>FALSE</constant></emphasis> - ドキュメントはまだトラッピングされていません。
161 必要なトラッピングを行わなければなりません。
166 <emphasis><constant>NULL</constant></emphasis> -
167 ドキュメントがトラッピングされているかどうかが判別不可能、
168 あるいは一部だけトラッピングされている状態です。
169 さらなるトラッピングが必要かもしれません。
179 <acronym>PDF</acronym> v 1.6 以降では、メタデータを特別な <acronym>XML</acronym> 形式
180 (XMP - <ulink url="http://www.adobe.com/products/xmp/">Extensible Metadata Platform</ulink>)
181 で表して <acronym>PDF</acronym> に添付できます。
185 この <acronym>XML</acronym> ドキュメントを <acronym>PDF</acronym> から取得したり
186 <acronym>PDF</acronym> に添付したりするには、それぞれ
187 <methodname>Zend_Pdf::getMetadata()</methodname> メソッドおよび
188 <methodname>Zend_Pdf::setMetadata($metadata)</methodname> メソッドを使用します。
189 <programlisting language="php"><![CDATA[
190 $pdf = Zend_Pdf::load($pdfPath);
191 $metadata = $pdf->getMetadata();
192 $metadataDOM = new DOMDocument();
193 $metadataDOM->loadXML($metadata);
195 $xpath = new DOMXPath($metadataDOM);
196 $pdfPreffixNamespaceURI = $xpath->query('/rdf:RDF/rdf:Description')
198 ->lookupNamespaceURI('pdf');
199 $xpath->registerNamespace('pdf', $pdfPreffixNamespaceURI);
201 $titleNode = $xpath->query('/rdf:RDF/rdf:Description/pdf:Title')->item(0);
202 $title = $titleNode->nodeValue;
205 $titleNode->nodeValue = 'New title';
206 $pdf->setMetadata($metadataDOM->saveXML());
207 $pdf->save($pdfPath);
212 標準的なドキュメントのプロパティは、Info 構造体とメタデータドキュメント
213 (存在する場合) の両方に重複して存在することになります。
214 これらをきちんと同期させるのは、アプリケーション側の責任となります。