Ir al contenido

PGD | §3.10 – El formato PDF y su relación con PostScript

§3.9 – Introducción a PDF

Históricamente, PDF se desarrolló sobre las ideas y herramientas creadas para PostScript; de aquí que la primera forma práctica para crear un PDF desde cualquier aplicación, aprovechando la tecnología existente, fue crear un archivo PostScript para luego convertirlo mediante Distiller.

Podemos ordenar las semejanzas entre PDF y PostScript de esta forma:

  • Por diseño, ambos son lenguajes de descripción de páginas (PDL – Printer Description Language);
  • Utilizan el mismo modelo de imagen;
  • Ambos son independientes del dispositivo: la descripción del documento no requiere a priori información alguna sobre el dispositivo sobre el cual se procesará el archivo correspondiente;
  • Por diseño, ambos son también independientes de la plataforma: esto significa que la técnica de generación de un documento en PDF o en PostScript no está atada a las características de ninguna plataforma informática específica. En otras palabras, es posible generar el mismo archivo en cualquiera de las plataformas soportadas;
  • Por último, ambos exhiben independencia de la aplicación: la aplicación o programa empleado para la generación de cualquiera de ellos no condiciona la validez del archivo generado.

Sin embargo, las semejanzas terminan allí. Para una mejor comprensión, vamos a resaltar claramente las diferencias:

  • Mientras PostScript es un lenguaje de programación que se emplea al mismo tiempo para describir una página, PDF es un auténtico lenguaje de descripción: no es posible ejecutar procedimientos ni realizar cálculos con él[1]. Una implicación de esto es que un PDF debe describir cada objeto de la página de manera independiente de los demás; en cambio PostScript permite, mediante la repetición de procedimientos, crear un número variable de objetos con la misma línea de código; podemos decir que  PostScript está basado en comandos, mientras que PDF está basado en objetos. Esta concisión a priori de PostScript es una consecuencia de su elevado poder expresivo, pero que es un inconveniente para la confiabilidad de los documentos generados: los objetos de la página dependen de la interpretación que se haga del código. Hemos cambiado así flexibilidad por eficiencia y predictibilidad.
  • Un documento PostScript es una descripción secuencial; no es posible conocer los objetos de la página hasta no finalizar el proceso de todo el documento. En cambio, un documento PDF está organizado para permitir un acceso a cualquiera de los objetos de la página, en cualquier orden. Esto obliga a una estructura de archivo mucho más estricta que en PostScript.
  • A diferencia de PostScript, un documento PDF contiene información sobre la métrica de las fuentes utilizadas para asegurar la mayor fidelidad de reproducción posible; si una fuente no está presente en el equipo donde se visualiza el PDF, se elije automáticamente de entre las fuentes disponibles un reemplazo utilizando dicha métrica. Téngase en cuenta, no obstante, que mientras ésta es una ventaja en el ámbito de la documentación electrónica, no lo es en la gráfica, donde normalmente la fuente debe estar incrustada o, en el peor de los casos, una copia fiel debe estar instalada en el equipo.
  • Un PDF puede contener información no relacionada directamente con el modelo de imagen; ejemplos son los enlaces (hyperlinks) y marcadores (bookmarks) ya citados, o en versiones más modernas, contenido multimedia (audio y/o video) o en 3D.
  • Un documento PDF, a diferencia de PostScript, puede verse en pantalla (sin necesidad de imprimirlo) mediante un software gratuito, Adobe Reader.

Elementos y estructura interna de un PDF

Internamente, un documento PDF consta de un encabezamiento (header) que identifica el formato, formado por los caracteres %PDF seguido de un guión y el número de versión; luego, una colección de objetos con una sintaxis de aspecto similar a PostScript; una o más tablas de referencias cruzadas; y por último un final (trailer). Los objetos son también similares a los de PostScript: números, texto, matrices, diccionarios, etc. Cada objeto al que sea necesario referirse se le asigna un número de objeto (que lo identifica) y un número de generación, que indica que ese objeto ha sido modificado desde su creación inicial. Para saber la ubicación de cualquiera de esos objetos en el interior del archivo, se consultan las tablas de referencias cruzadas, que están identificadas con la palabra clave xref. La primera de estas secciones se ubica leyendo la palabra clave startxref, colocada siempre en el trailer del documento, que indica a cuántos bytes del principio del archivo se encuentra la última tabla xref. Por esta razón las aplicaciones que lean PDF deben hacerlo desde el final del archivo.

Ejemplo de un documento PDF

Presentaremos un ejemplo de un PDF básico[2], cuyo único contenido es la frase “Hello World”. Obsérvese la notación n g obj que introduce cada objeto (7 en total), donde n es el númeo de objeto y g el número de generación. En este caso g siempre es cero: el documento es original (no ha sido editado). La sección xref lista esos objetos, comenzando por un objeto especial (objeto nulo), con lo cual la tabla tiene 8 entradas.

%PDF−1.3
1 0 obj
	<< /Type /Catalog
	/Outlines 2 0 R
	/Pages 3 0 R
	>>
endobj
 
2 0 obj
	<< /Type /Outlines
	/Count 0
	>>
endobj
 
3 0 obj
	<< /Type /Pages
	/Kids [4 0 R]
	/Count 1
	>>
endobj
 
4 0 obj
	<< /Type /Page
	/Parent 3 0 R
	/MediaBox [0 0 612 792]
	/Contents 5 0 R
	/Resources << /ProcSet 6 0 R
	/Font << /F1 7 0 R >>
	>>
	>>
endobj

5 0 obj
	<< /Length 73 >>
	/F1 24 Tf
	100 100 Td
	(Hello World) Tj
endobj

6 0 obj
[/PDF /Text]
endobj

7 0 obj
	<< /Type /Font
	/Subtype /Type1
	/Name /F1
	/BaseFont /Helvetica
	/Encoding /MacRomanEncoding
	>>
endobj
xref
0 8
0000000000 65535 f
0000000009 00000 n
0000000074 00000 n
0000000120 00000 n
0000000179 00000 n
0000000364 00000 n
0000000466 00000 n
0000000496 00000 n
trailer
	<< /Size 8
	/Root 1 0 R
	>>
startxref
625
%%EOF

Texto contenido en un PDF elemental.

§3.11 – Opciones de generación de un documento PDF >

1 Dicho en la jerga de los lenguajes de programación, PDF no permite el uso de procedimientos, variables ni estructuras de control, sean alternativas o iterativas.
2 Este ejemplo está tomado del Apéndice G del PDF Reference, versión 1.3, 2da edición. Allí se pueden encontrar explicaciones detalladas que dan cuenta del significado de todos los elementos presentes en el PDF.