PDFMove
¿Cómo funciona la extracción de páginas de un PDF? Árbol de objetos y recursos compartidos
Guía

¿Cómo funciona la extracción de páginas de un PDF? Árbol de objetos y recursos compartidos

8 min de lectura

Cuando extraes tres páginas de un PDF, ¿qué ocurre por detrás? Las páginas no se cortan y se pegan, porque en un PDF una "página" no es una cosa monolítica. En este artículo miramos la estructura interna del formato y explicamos por qué la extracción es tan rápida, por qué el archivo extraído a veces queda inesperadamente grande y por qué les pasa algo a los marcadores y a los enlaces.

El interior del PDF: objetos y referencias

Un archivo PDF es una colección de objetos numerados. Cada objeto tiene un número y los objetos se referencian entre sí por ese número. A grandes rasgos hay cosas como estas:

  • Catálogo: el objeto raíz del documento. Dice "el árbol de páginas está en este objeto, el esquema en aquel".
  • Árbol de páginas: una estructura de árbol que mantiene las páginas en orden.
  • Objetos de página: cada uno representa una hoja. No llevan contenido dentro, sino referencias: "mi contenido está en este objeto, mis recursos en aquel, mi tamaño es este".
  • Flujo de contenido (content stream): la secuencia de instrucciones que describe cómo dibujar la página.
  • Objetos de recurso: tipografías, imágenes, perfiles de color, grupos de transparencia.

El punto clave es este: el objeto de página no alberga el contenido, apunta a él. Y varias páginas pueden apuntar al mismo recurso. Una tipografía incrustada usada en el documento es un único objeto; las 300 páginas la referencian. Si un logotipo corporativo aparece arriba de cada página, en el archivo hay un solo objeto de imagen y 300 páginas lo miran.

Ese uso compartido es el mecanismo básico que mantiene los PDF en un tamaño razonable, y también, como veremos enseguida, la causa de las sorpresas de tamaño tras la extracción.

Qué hace paso a paso la extracción

Cuando dices "extrae las páginas 10 a 12", la herramienta hace esto:

1. Recorre el árbol de páginas y localiza los objetos de página de los índices pedidos.

2. Hace un seguimiento de dependencias. Partiendo de cada objeto de página seleccionado, sigue todo lo que depende de él: el flujo de contenido, las tipografías que usa ese flujo, las imágenes, los espacios de color, las anotaciones y los campos de formulario. Es como un recorrido de alcanzabilidad en un grafo: empiezas por la raíz y marcas todos los nodos a los que puedes llegar.

3. Copia al archivo nuevo los objetos alcanzables. Durante la copia se reasignan los números de objeto, porque en el archivo nuevo la numeración empieza de cero. Las referencias se actualizan en consecuencia.

4. Monta un catálogo y un árbol de páginas nuevos. En el árbol nuevo solo hay tres páginas, colocadas en orden.

5. Reescribe la tabla de referencias cruzadas (xref). Esa tabla indica en qué byte del archivo empieza cada objeto; evita que el visor tenga que recorrer todo el archivo para encontrar un objeto.

En ninguno de esos pasos hay procesamiento de imagen. No se recodifica ningún JPEG ni se vuelve a dibujar ningún texto. La operación es básicamente copiar y renumerar, y por eso es a la vez muy rápida y con pérdida de calidad rigurosamente nula.

La explicación de la sorpresa de tamaño

Llegamos ahora a la pregunta más frecuente: has extraído 2 páginas de un archivo de 300 páginas y 40 MB, y el resultado ocupa 4 MB. ¿Por qué?

La respuesta está en el segundo paso: el seguimiento de dependencias. Si la página extraída usa la tipografía incrustada del documento, ese objeto de tipografía tiene que copiarse al archivo nuevo. Una familia tipográfica completa (normal, negrita, cursiva, negrita cursiva) ocupa tranquilamente 2 o 3 MB. Y si en la página hay una foto a página completa, también se traslada tal cual.

| Tipo de recurso | Efecto en el archivo extraído | |---|---| | Tipografía incrustada (completa) | Se traslada entera, puede ser de varios MB | | Tipografía incrustada (subconjunto) | Se traslada el subconjunto, es menor | | Imágenes de la página | Se trasladan tal cual, la calidad no cambia | | Perfil de color ICC | Se traslada, unos cientos de KB | | Recursos no utilizados | No se trasladan, se descartan |

Algunas herramientas van un paso más allá y "resubsetan" la tipografía incrustada, es decir, conservan solo las letras que aparecen en las páginas extraídas. Eso supone una reducción notable, pero es una operación más pesada y no todas las herramientas la hacen.

Si el tamaño es crítico para ti, la solución práctica es sencilla: tras la extracción, pasa el archivo una vez por una herramienta de compresión. La compresión descarta los recursos no utilizados, recodifica las imágenes y recomprime los flujos.

Qué les pasa a los marcadores y los enlaces

El árbol de esquema (outline) del documento vive a nivel de catálogo y cada entrada apunta a un destino: "Capítulo 3 → objeto de página 147".

Cuando extraes 3 páginas, casi todas las entradas de ese árbol apuntan a páginas que ya no están en el archivo. Un marcador con destino roto no hace nada al pulsarlo o provoca un error en el visor. Algunas herramientas intentan filtrar y trasladar las entradas que sobreviven; el resultado suele ser un árbol de dos títulos con la jerarquía rota, que confunde más de lo que ayuda. Por eso muchas aplicaciones prefieren descartar el esquema por completo.

La misma lógica vale para los enlaces internos. Si el destino de un enlace como "véase el Anexo B" no se ha extraído, el enlace queda roto. En cambio, los enlaces externos (acciones URI a una dirección web) siguen funcionando sin problema, porque no dependen de ninguna página.

Los campos de formulario están en una situación intermedia curiosa. El campo en sí es una anotación ligada a la página, así que se traslada. Pero el diccionario de campos del formulario (AcroForm) está a nivel de documento y puede contener lógica de cálculo o validación entre campos. Cuando extraes una parte de un formulario de varias páginas, los campos se ven pero la lógica puede quedar rota.

El dilema del número de página

En el archivo que extraes, el contador de páginas empieza en 1, porque viene del orden en el árbol de páginas. Pero el "47" impreso sobre la página forma parte del flujo de contenido: es una instrucción de dibujo de texto. Como la extracción no toca el flujo de contenido, ese número se queda igual.

Es decir, al pie de la primera hoja de tu archivo nuevo puede poner "47". No es un error, es la consecuencia natural del formato. Si quieres corregirlo hay dos vías: estampar una numeración nueva (que se verá junto a la antigua) o tapar la antigua con una caja blanca usando la herramienta de edición y añadir el número nuevo.

Algunos PDF llevan además definiciones de etiqueta de página (page label): una estructura a nivel de documento que hace que el visor muestre en su cuadro de páginas etiquetas especiales como "iv" o "A-3". Estas normalmente no se trasladan en la extracción.

Dónde se hace el procesamiento

Ninguno de los pasos anteriores implica cálculo pesado. Leer objetos, seguir dependencias, renumerar y escribir: todo eso son operaciones de memoria y de archivo. En esta herramienta no se ejecutan en tu navegador, sino en nuestro servidor.

La consecuencia práctica es esta: tu archivo se sube a nuestro servidor mediante HTTPS (una conexión cifrada) y se guarda con un nombre generado al azar, no con su nombre original. Una tarea en segundo plano extrae las páginas que elegiste y tú descargas el resultado; el archivo subido y el resultado se eliminan automáticamente unas 2 horas después. No necesitas crear una cuenta. Como la extracción en sí es ligera, la mayor parte de la espera corresponde a la subida y la descarga, que dependen del tamaño del archivo y de tu conexión.

Como el trabajo se hace en el servidor, el límite no lo marca la memoria de tu dispositivo. Con archivos muy grandes (cientos de megabytes), lo que más tarda es la subida, así que una conexión estable facilita el trabajo.

En resumen

La extracción de páginas consiste en hacer un recorrido de alcanzabilidad por el grafo de objetos del PDF y copiar a un archivo nuevo todo lo que depende de las páginas seleccionadas. Como no se recodifica ningún contenido, la pérdida de calidad es nula y la operación es muy rápida. A cambio, como los recursos compartidos (sobre todo las tipografías incrustadas) tienen que trasladarse, la salida puede quedar desproporcionadamente grande; la compresión lo resuelve. Los marcadores, los enlaces internos y las etiquetas de página, que viven a nivel de documento, no sobreviven a la operación por su propia naturaleza: sus destinos ya no están en el archivo.

Preguntas frecuentes

¿Al extraer páginas baja la calidad de imagen?

No, no baja en absoluto. La extracción no recodifica las imágenes; copia tal cual al archivo nuevo el flujo de contenido de la página y los objetos de los que depende. Una imagen JPEG se queda como estaba y el texto sigue siendo vectorial. Esa es la diferencia fundamental con la compresión, donde las imágenes sí pueden recodificarse y perder calidad.

¿Por qué las 2 páginas que he extraído de un archivo de 300 ocupan 4 MB?

Porque esas dos páginas pueden depender de recursos compartidos a nivel de documento. Una familia tipográfica incrustada puede ocupar por sí sola varios megabytes y, mientras esa tipografía se use en la página, hay que trasladarla al archivo nuevo. Lo mismo vale para los perfiles de color y para las imágenes de alta resolución colocadas en la página. En ese caso, la herramienta de compresión suele ayudar.

¿Que los marcadores no se trasladen es una carencia o una necesidad técnica?

Una mezcla de ambas. Los marcadores se guardan en un árbol de esquema (outline) a nivel de documento y cada entrada apunta a una página. Como en el subconjunto que extraes la mayoría de esas páginas no están, gran parte de las entradas apuntan a destinos rotos. Algunas herramientas intentan trasladar las entradas que sobreviven, pero el resultado suele quedar a medias y confundir, así que muchas aplicaciones prefieren descartar el esquema por completo.

¿Se envía el archivo a un servidor durante la extracción?

Sí. El archivo se sube a nuestro servidor mediante HTTPS (una conexión cifrada) y la extracción se hace allí. La operación en sí es ligera en términos de cálculo: lo que se hace es leer objetos, escribirlos en un archivo nuevo y renumerar las referencias; no hay procesamiento de imagen ni recodificación. El archivo subido y el resultado se eliminan automáticamente unas 2 horas después, y no necesitas cuenta.

Pruébalo ahora mismo con Sayfa Çıkar.

Probar Sayfa Çıkar