37.6. ドキュメントの情報およびメタデータ

PDF ドキュメントには、そのドキュメントに関する情報 (たとえばタイトルや作者、作成日、更新日など) を含めることができます。

歴史的に、この情報は特別な Info 構造体に格納されるようになっています。 この構造体を読み書きするには、Zend_Pdf オブジェクトの public プロパティ properties の連想配列を使用します。

$pdf = Zend_Pdf::load($pdfPath);

echo $pdf->properties['Title'] . "\n";
echo $pdf->properties['Author'] . "\n";

$pdf->properties['Title'] = 'New Title.';
$pdf->save($pdfPath);

            

PDF v1.4 (Acrobat 5) の標準規格では、次のようなキーが定義されています。

PDF v 1.6 以降では、メタデータを特別な XML 形式 (XMP - Extensible Metadata Platform) で表して PDF に添付することができます。

この XML ドキュメントを PDF から取得したり PDF に添付したりするには、それぞれ Zend_Pdf::getMetadata() メソッドおよび Zend_Pdf::setMetadata($metadata) メソッドを使用します。

$pdf = Zend_Pdf::load($pdfPath);
$metadata = $pdf->getMetadata();
$metadataDOM = new DOMDocument();
$metadataDOM->loadXML($metadata);

$xpath = new DOMXPath($metadataDOM);
$pdfPreffixNamespaceURI = $xpath->query('/rdf:RDF/rdf:Description')->item(0)->lookupNamespaceURI('pdf');
$xpath->registerNamespace('pdf', $pdfPreffixNamespaceURI);

$titleNode = $xpath->query('/rdf:RDF/rdf:Description/pdf:Title')->item(0);
$title = $titleNode->nodeValue;
...

$titleNode->nodeValue = 'New title';
$pdf->setMetadata($metadataDOM->saveXML());
$pdf->save($pdfPath);

            

標準的なドキュメントのプロパティは、Info 構造体とメタデータドキュメント (存在する場合) の両方に重複して存在することになります。 これらをきちんと同期させるのは、アプリケーション側の責任となります。