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.

Por qué se puede hacer en el navegador

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. Un navegador moderno lo hace rápido incluso con archivos de varios cientos de páginas.

La consecuencia práctica es esta: tu archivo no va a ningún servidor. Si estás extrayendo las páginas de firma de un contrato confidencial o separando la hoja relevante de un informe médico, el documento no sale de tu dispositivo. Además, como no hay espera de subida y descarga, la operación es rápida con independencia del tamaño del archivo.

El límite es la memoria que puede usar la pestaña del navegador. En archivos muy grandes (cientos de megabytes, miles de páginas de alta resolución) puede haber presión de memoria; en ese caso, dividir primero el archivo a grandes rasgos y extraer después alivia 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.

¿Cómo se puede hacer la extracción en el navegador, no hace falta servidor?

No hace falta, porque la operación 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. Los navegadores modernos lo hacen sin problema incluso en archivos de varios cientos de páginas, y el archivo no sale del dispositivo.

Pruébalo ahora mismo con Sayfa Çıkar.

Probar Sayfa Çıkar