Cómo funciona un archivo PDF: objetos, tabla de referencias cruzadas y por qué cuesta tanto editarlo
Si abres un PDF con un editor de texto encuentras objetos numerados, una tabla de posiciones en bytes y órdenes de dibujo comprimidas. Explicamos esa estructura, su historia —de Acrobat en 1993 a ISO 32000-2— y por qué un PDF no se edita como un documento de Word.
Si alguna vez abriste un PDF con el Bloc de notas, viste algo como %PDF-1.7 en la primera línea y después un muro de caracteres ilegibles. Debajo hay una estructura más sencilla de lo que parece, y conocerla explica varias molestias cotidianas: por qué al unir dos PDF se pierden los marcadores del segundo, por qué al dividir un archivo las partes pueden pesar más que el original y por qué cambiar una palabra en un PDF cuesta tanto más que en un procesador de textos.
De dónde viene el PDF
En 1991, John Warnock, cofundador de Adobe, escribió un memorando interno —conocido después como el documento Camelot— en el que defendía que las empresas necesitaban una forma universal de enviar documentos entre máquinas, sistemas operativos y redes distintas y que se vieran igual en todas partes. Adobe ya tenía PostScript, el lenguaje de descripción de páginas de las impresoras láser. Pero PostScript es un lenguaje de programación completo: para dibujar la página 10 normalmente había que ejecutar el programa desde la 1 hasta la 9, y un archivo podía hacer bucles, bifurcaciones y cálculos.
El PDF conservó el modelo gráfico de PostScript —líneas, curvas, texto e imágenes colocados en coordenadas—, eliminó la programación de propósito general y lo envolvió en una estructura de archivo que permite saltar directamente a cualquier página. Adobe lo lanzó con Acrobat 1.0 en junio de 1993.
Adobe fue publicando cada especificación, de PDF 1.0 a 1.7. En 2008, PDF 1.7 se convirtió en la norma internacional ISO 32000-1. Su sucesora, PDF 2.0 (ISO 32000-2), apareció en 2017 como la primera versión desarrollada íntegramente dentro de un comité de ISO y no solo por Adobe, y en 2020 se publicó una revisión corregida. Desde abril de 2023 la PDF Association, con el patrocinio de Adobe, Apryse y Foxit, ofrece ISO 32000-2 para descarga gratuita.
Las cuatro partes de un archivo PDF
| Parte | Qué contiene |
|---|---|
| Cabecera | Una primera línea como %PDF-1.7 con la versión |
| Cuerpo | Objetos numerados |
| Tabla de referencias cruzadas (xref) | La posición en bytes donde empieza cada objeto |
| Tráiler | Qué objeto es el catálogo del documento y dónde está la xref |
Un objeto del cuerpo tiene este aspecto:
4 0 obj
<< /Type /Page /Parent 2 0 R /MediaBox [0 0 595 842]
/Contents 5 0 R /Resources << /Font << /F1 6 0 R >> >> >>
endobj
4 0 obj significa «objeto número 4, generación 0». Los signos << >> encierran un diccionario de pares nombre–valor y 5 0 R es una referencia: «ve a mirar el objeto 5». Esta página es A4 (595×842 puntos; un punto es 1/72 de pulgada), sus instrucciones de dibujo están en el objeto 5 y su fuente es el objeto 6.
Todo el documento es un grafo de referencias como esta. El tráiler apunta al catálogo; el catálogo, al árbol de páginas, a los marcadores (Outlines) y a la definición del formulario (AcroForm); el árbol de páginas, a cada página; y cada página, a su contenido, sus fuentes y sus imágenes.
Un visor no lee el archivo desde el principio. Salta al final, lee el número que sigue a startxref para localizar la tabla de referencias cruzadas, busca en ella la posición del objeto que necesita y va directamente allí. La especificación fija cada entrada de la xref en exactamente 20 bytes, así que la entrada del objeto n se calcula en lugar de buscarse. Por eso un PDF de 500 páginas puede abrirse en la página 300 casi al instante.
PDF 1.5 añadió los flujos de objetos, que agrupan muchos objetos pequeños en un solo flujo comprimido, y los flujos de referencias cruzadas, que comprimen la propia xref. Por eso un PDF moderno abierto en un editor de texto muestra tan pocos objetos legibles: casi todos están dentro de flujos comprimidos. Cuánto ahorra eso se explica en por qué varía la compresión de PDF.
Actualizaciones incrementales: los cambios se añaden al final
Un PDF puede guardarse sin reescribir todo el archivo. En una actualización incremental solo se añaden al final los objetos modificados, seguidos de una nueva sección de referencias cruzadas que enumera únicamente esos objetos y de un nuevo tráiler. El nuevo tráiler recuerda dónde estaba la xref anterior, de modo que el visor recorre las secciones desde la más reciente hacia atrás y siempre encuentra la última versión de cada objeto.
De ahí salen dos consecuencias. La primera, las firmas digitales. Una firma cubre los bytes existentes en el momento de firmar, así que los cambios posteriores pueden añadirse sin romperla, y un validador puede saber con exactitud qué se agregó después de la firma. La segunda, la privacidad. En un archivo guardado de forma incremental, un texto que borraste o un valor de formulario que sobrescribiste puede seguir intacto más arriba en el archivo. Si eliminaste algo sensible, hace falta reescribir el archivo completo —«Guardar como» u optimizar— para que la versión antigua desaparezca de verdad.
El texto se estampa en coordenadas, no se escribe en frases
Si descomprimes el flujo de contenido de una página, encuentras instrucciones como estas:
BT
/F1 12 Tf
72 770 Td
(Hola) Tj
ET
Empieza texto, usa la fuente F1 a 12 puntos, muévete a (72, 770), muestra «Hola», termina el texto. No hay párrafos, ni saltos de línea, ni nada que diga que esta línea va después de aquella. El procesador de textos ya partió el párrafo en líneas y ajustó los espacios; el PDF registra solo el resultado final, como glifos o grupos de glifos fijados a posiciones. En un párrafo justificado, hasta el espacio extra entre palabras está escrito como números.
Por eso, cuando cambias una palabra, el resto de la línea no se recoloca. Cambia «C/ Mayor» por «Calle Mayor» y el texto nuevo se monta sobre lo que viene después. Para que un editor recoloque bien la línea, primero tiene que adivinar dónde empezaba y dónde terminaba el párrafo original. Las tablas son peores: la cuadrícula son segmentos sueltos y el texto simplemente está encima. Cuando una conversión de PDF a Word sale con un salto de línea al final de cada renglón o con la página llena de cuadros de texto flotantes, es el conversor fallando justo en esa adivinanza.
Que al copiar texto salgan caracteres sin sentido tiene la misma raíz. Los bytes dentro de (Hola) pueden ser números de glifo de la fuente incrustada y no códigos de carácter. Una tabla aparte, llamada ToUnicode, indica a qué carácter Unicode corresponde cada glifo; si falta o está mal, la página se ve perfecta pero al pegar sale basura. Es un problema habitual con tildes y eñes en PDF generados por programas antiguos.
Las fuentes solo contienen las letras que usaste
Para verse igual en un equipo que no tiene la fuente, el PDF la lleva dentro (incrustación). Una fuente completa puede ser grande —una fuente CJK con miles de caracteres puede ocupar varios megas—, así que la mayoría de los PDF incrustan un subconjunto con solo los glifos usados. La especificación marca un subconjunto anteponiendo al nombre de la fuente seis mayúsculas y un signo más. Si en las propiedades de un PDF ves una fuente como ABCDEF+Calibri, es un subconjunto.
El subconjunto es otra razón por la que editar cuesta. Si intentas escribir un carácter que el documento original nunca usó —una «ñ» en un texto que no tenía ninguna, por ejemplo—, la fuente incrustada no contiene su forma. El editor tiene que sustituirla por otra fuente o encontrar la fuente completa instalada en tu equipo, y si no hay ninguna de las dos, no puede añadir ese carácter con esa tipografía.
Dónde se nota esta estructura en el día a día
Unir. Una herramienta de unión traslada al primer archivo los objetos de página del segundo, con todo lo que referencian, y los renumera. Los marcadores y las definiciones de formulario viven en el catálogo, no en las páginas, así que trasladar páginas no los arrastra. Por eso Unir PDF conserva solo los marcadores del primer archivo.
Dividir. Las fuentes y los logotipos se guardan una vez y se comparten por número de objeto. Divide un documento en diez y cada parte necesita su propia copia de los recursos compartidos, así que las partes pesan más que el original. Es lo que ves cuando Dividir PDF produce archivos más grandes de lo esperado.
Comprimir. El texto y los dibujos vectoriales ocupan poco. La mayor parte del peso de un PDF son flujos de imagen y fuentes incrustadas, así que ahí es donde Comprimir PDF puede ahorrar, bajando la resolución y la calidad de las imágenes. Un archivo guardado de forma incremental muchas veces, con revisiones antiguas acumuladas, también puede reducirse solo con reescribirlo.
Inspeccionar. La versión que declara un archivo, qué fuentes van incrustadas como subconjunto y qué MediaBox y CropBox tiene cada página se pueden consultar con Información PDF. Es lo primero que conviene mirar cuando la imprenta avisa de que una fuente no está incrustada.
Ideas equivocadas frecuentes
- «Los PDF no se pueden editar». Sí se puede: las actualizaciones incrementales, los formularios y las anotaciones existen precisamente para admitir cambios. Lo que no tiene el PDF es edición a nivel de párrafo; la unidad de cambio es el objeto.
- «Un PDF contiene el documento original». Normalmente solo contiene el resultado impreso. Algunas aplicaciones guardan dentro también sus propios datos editables, pero el formato PDF no lo exige.
- «Un número de versión más alto es mejor». La versión de la cabecera es solo el techo de funciones que el archivo puede usar. Muchas aplicaciones siguen escribiendo archivos 1.x, y guardar como PDF 2.0 no mejora la calidad.
- «Recortar elimina el contenido». Recortar una página normalmente solo reduce el CropBox, el área visible. Todo lo que queda fuera sigue en el archivo.
Fuentes
- ISO 32000-1:2008 Document management — Portable document format — Part 1: PDF 1.7 (copia pública de Adobe)
- PDF Association — ISO 32000-2 (PDF 2.0)
- PDF Association — Announcing no-cost access to ISO 32000-2 (PDF 2.0)
- PDF Association — ISO 32000-1
- Adobe Blog — Evolution of the Digital Document: Celebrating Adobe Acrobat's 25th Anniversary (2018)
- Library of Congress — PDF 2.0, ISO 32000-2 (2017, 2020)