TigerZF
🌐Español

55.7. Información del documento y metadatos

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.