Saltar al contenido
PDFLove

qué hay dentro de un archivo pdf

Qué hay realmente dentro de un archivo PDF

Abre un PDF en un editor de texto y encontrarás algo más parecido al volcado de una base de datos que a un documento. Casi todas las rarezas de este formato salen de ese único hecho.

01

Objetos, no páginas

Un archivo PDF es una colección numerada de objetos. Cada uno es un diccionario, un flujo de bytes, una matriz, un número o una cadena, y cada uno tiene un identificador. Los objetos se refieren unos a otros por número: el objeto 3 dice "mi contenido está en el objeto 47", el objeto 47 dice "mi tipografía es el objeto 12".

Uno de esos objetos es el catálogo, la raíz de todo. Apunta a un árbol de páginas. El árbol de páginas apunta a los objetos de página. Cada objeto de página apunta a un flujo de contenido y a un diccionario con los recursos que ese flujo necesita: tipografías, imágenes, espacios de color.

No hay ningún objeto llamado "párrafo", ni ningún objeto llamado "título". La estructura se acaba en la página. Todo lo que hay por debajo son instrucciones de dibujo.

Cabecera
Una línea: %PDF-1.7. La versión determina qué funciones puede esperar un lector.
Cuerpo
Los objetos numerados. Tipografías, imágenes, definiciones de página, flujos de contenido, metadatos.
Tabla de referencias cruzadas
Un índice de desplazamientos en bytes: el objeto 47 empieza en el byte 91.204. Es como un lector salta directo a la página 900 de un archivo de 1.000 sin leer las 899 anteriores.
Cola (trailer)
Apunta al catálogo y a dónde empieza la tabla de referencias cruzadas. Es lo último del archivo, y por eso los lectores abren un PDF yendo primero al final.

02

El flujo de contenido es una lista de instrucciones

Dentro del flujo de contenido de una página hay una secuencia de operadores en notación postfija: primero los operandos y después la orden. `1 0 0 1 72 720 Tm` fija una posición de texto. `/F1 12 Tf` selecciona la tipografía F1 a 12 puntos. `(Hola) Tj` dibuja la cadena. `re` construye un rectángulo, `f` lo rellena, `Do` pinta un objeto de imagen.

Ese es el modelo entero: un pintor siguiendo órdenes, de arriba abajo. La página es lo que queda en el lienzo cuando se acaban las órdenes.

De ahí salen dos consecuencias inmediatas, y entre las dos explican muchísimo. El orden del flujo es orden de dibujo, no orden de lectura: una nota al pie puede dibujarse antes que el texto que la referencia. Y nada en el flujo dice qué *es* cada cosa. Un título es texto que resulta estar dibujado más grande.

03

Por qué el final del archivo es la parte que más importa

La tabla de referencias cruzadas es un índice de desplazamientos en bytes, y los desplazamientos en bytes son frágiles. Cambia cualquier cosa en mitad de un PDF y todos los desplazamientos posteriores se mueven. Por eso editar un PDF en un editor de texto casi siempre lo corrompe, y por eso una descarga cortada produce un archivo que no abre en absoluto aunque el 95% de su contenido haya llegado intacto.

Y por eso mismo la reparación es posible y sale bien a menudo. Cuando un lector dice que el archivo está dañado, normalmente significa que los desplazamientos están mal, no que los objetos hayan desaparecido. Una pasada de reparación ignora la tabla rota, recorre el archivo entero buscando cualquier cosa con pinta de cabecera de objeto y reconstruye el índice con lo que encuentra.

04

Actualizaciones incrementales: los PDF tienen memoria

Un PDF se puede modificar añadiendo al final. En vez de reescribir el archivo, el programa que escribe añade al final las versiones nuevas de los objetos cambiados y después una tabla de referencias cruzadas nueva que apunta a ellos y enlaza hacia atrás con la antigua. El lector usa la tabla más reciente, así que ve la versión nueva.

Los objetos viejos siguen dentro del archivo. Es deliberado: es lo que hace verificables las firmas digitales, porque puedes reconstruir exactamente qué se firmó. También es un riesgo real: un tachado hecho dibujando un rectángulo negro deja el texto de debajo completamente intacto y extraíble, y las páginas "eliminadas" muchas veces no lo están.

Guardar un PDF de cero, en vez de incrementalmente, descarta el historial. Aplanar también. Si un documento ha pasado por varias rondas de ediciones, eso conviene saberlo antes de enviarlo.

05

Qué explica todo esto

Casi todas las quejas sobre los PDF vuelven a este modelo. El texto copiado llega revuelto porque el orden del flujo de contenido es orden de dibujo. Los conversores pierden formato porque nunca hubo estructura que convertir, solo glifos colocados. Unir es rápido y sin pérdidas porque es renumerar objetos y no volver a dibujar páginas. Los archivos siguen siendo tercamente grandes porque el peso está en los objetos de imagen, y por mucho texto que quites no los tocas.

Es un formato diseñado para garantizar que una página se vea idéntica en todas partes, y lo consigue por completo. El precio es todo lo que dependa de saber qué significa esa página.

Preguntas

Preguntas relacionadas

¿Puedo abrir un PDF en un editor de texto?

Sí, y merece la pena hacerlo una vez. Verás la cabecera, diccionarios legibles y largas tiradas de binario donde están los flujos comprimidos. Lo que no debes hacer es guardarlo: cambiar un solo byte en medio desplaza todos los desplazamientos de referencias cruzadas posteriores y rompe el archivo.

¿Por qué pesa tanto un PDF que parece sencillo?

Porque el tamaño vive en objetos que no ves en la página: tipografías incrustadas, datos de imagen a resolución de escáner y, a veces, el historial entero de ediciones que dejan los guardados incrementales. El texto visible suele ser lo más pequeño del archivo.

¿Eliminar una página elimina su contenido?

Depende de cómo se haya eliminado. Quitar una página del árbol de páginas y guardar de forma incremental deja el objeto de la página dentro del archivo. Una reescritura en condiciones descarta todo lo que ya no esté referenciado. Si el contenido es sensible, reescribe o aplana en vez de dar nada por hecho.

¿Qué diferencia hay entre PDF 1.4 y PDF 2.0?

Sobre todo capacidades añadidas con los años: transparencia en la 1.4, flujos de objetos y de referencias cruzadas en la 1.5, cifrado AES-128 en la 1.6, AES-256 y una especificación limpia en la 2.0. El modelo de objetos de debajo no ha cambiado desde 1993, y por eso un lector de hoy sigue abriendo un archivo de entonces.