Un documento PDF puede incluir información general como el título, el autor y las fechas de creación y modificación del documento.
Históricamente esta información se almacena mediante una estructura Info especial. Esta
estructura está disponible para lectura y escritura como un array asociativo a través de la
propiedad pública properties de los objetos Zend_Pdf:
$pdf = Zend_Pdf::load($pdfPath); echo $pdf->properties['Title'] . "\n"; echo $pdf->properties['Author'] . "\n"; $pdf->properties['Title'] = 'New Title.'; $pdf->save($pdfPath);
El estándar PDF v1.4 (Acrobat 5) define las siguientes claves:
Title - cadena, opcional, el título del documento.
Author - cadena, opcional, el nombre de la persona que creó el documento.
Subject - cadena, opcional, el asunto del documento.
Keywords - cadena, opcional, palabras clave asociadas al documento.
Creator - cadena, opcional, si el documento se convirtió a PDF desde otro formato, el nombre de la aplicación (por ejemplo, Adobe FrameMaker®) que creó el documento original a partir del cual se convirtió.
Producer - cadena, opcional, si el documento se convirtió a PDF desde otro formato, el nombre de la aplicación (por ejemplo, Acrobat Distiller) que lo convirtió a PDF..
-
CreationDate - cadena, opcional, la fecha y hora en que se creó el documento, en la siguiente forma: "D:YYYYMMDDHHmmSSOHH'mm'", donde:
YYYY es el año.
MM es el mes.
DD es el día (01–31).
HH es la hora (00–23).
mmes el minuto (00–59).
SS es el segundo (00–59).
O es la relación de la hora local con el Tiempo Universal (UT), denotada por uno de los caracteres +, −, o Z (ver más abajo).
HH seguido de ' es el valor absoluto del desfase respecto a UT en horas (00–23).
mm seguido de ' es el valor absoluto del desfase respecto a UT en minutos (00–59).
El carácter apóstrofo (') después de HH y mm forma parte de la sintaxis. Todos los campos posteriores al año son opcionales. (El prefijo D:, aunque también opcional, se recomienda encarecidamente.) Los valores por defecto de MM y DD son ambos 01; todos los demás campos numéricos toman por defecto el valor cero. Un signo más (+) como valor del campo O indica que la hora local es posterior a UT, un signo menos (−) que la hora local es anterior a UT, y la letra Z que la hora local es igual a UT. Si no se especifica información de UT, la relación de la hora especificada con UT se considera desconocida. Se conozca o no la zona horaria, el resto de la fecha debe especificarse en hora local.
Por ejemplo, el 23 de diciembre de 1998, a las 19:52, hora estándar del Pacífico de EE. UU., se representa mediante la cadena "D:199812231952−08'00'".
ModDate - cadena, opcional, la fecha y hora en que el documento se modificó por última vez, en la misma forma que CreationDate.
-
Trapped - booleano, opcional, indica si el documento se ha modificado para incluir información de trapping.
TRUE- El documento ha sido completamente sometido a trapping; no se necesita más trapping.FALSE- El documento aún no ha sido sometido a trapping; cualquier trapping deseado todavía debe realizarse.NULL- Se desconoce si el documento ha sido sometido a trapping, o ha sido sometido parcialmente pero no por completo; puede que aún se necesite trapping adicional.
Desde PDF v 1.6, los metadatos pueden almacenarse en el documento XML especial adjunto al PDF (XMP - Extensible Metadata Platform).
Este documento XML puede obtenerse y adjuntarse al PDF con los
métodos Zend_Pdf::getMetadata() y
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);
Las propiedades comunes del documento están duplicadas en la estructura Info y en el documento de Metadata (si está presente). Ahora es responsabilidad de la aplicación del usuario mantenerlas sincronizadas.