Vista web rápida: cómo se abre un PDF antes de terminar de descargarse
Spec: ISO 32000-2, Annex FISO 32000-2 Annex F
De un vistazo
Sección titulada «De un vistazo»Un PDF linealizado se reorganiza para que la primera página y un pequeño índice de navegación queden al comienzo mismo del archivo. Por tanto, un lector puede dibujar la primera página mientras el resto del documento aún está llegando, y saltar directamente a la página 147 sin leer antes las páginas 2 a 146.
Esta es la función que la mayoría de los lectores conoce por su nombre amistoso: Fast Web View.
Por qué importa
Sección titulada «Por qué importa»Imagine un informe de 200 páginas en un teléfono con una sola barra de cobertura. Sin linealización, el lector suele necesitar el final mismo del archivo antes de poder dibujar nada, porque el índice maestro que indica dónde se encuentra cada objeto se sitúa tradicionalmente al final. Así que uno observa una rueda de carga mientras se descargan doscientas páginas, solo para leer la primera.
Con linealización, el archivo se ordena de modo que la respuesta a «qué hay en la primera página» sea lo primero que sale por el cable. El lector pinta la primera página en un segundo y obtiene el resto solo a medida que uno se desplaza o salta. En una conexión rápida puede que nunca lo note. En una lenta o de pago por consumo, es la diferencia entre un documento utilizable y una pestaña abandonada.
La versión breve
Sección titulada «La versión breve»- Un archivo linealizado está adelantado al principio: la primera página y una tabla de indicios se colocan primero, antes del resto del cuerpo.
- La tabla de indicios es un mapa de rangos. Indica al lector qué rangos de bytes pertenecen a cada página y a los objetos compartidos, de modo que el lector pueda pedir al servidor solo esas porciones; luego la tabla de referencias cruzadas resuelve cada número de objeto hasta su desplazamiento exacto.
- Esto depende de las solicitudes por rango de bytes: el lector obtiene porciones del archivo bajo demanda, no el archivo entero.
- Los bytes son contenido idéntico al de un PDF normal. La linealización cambia el orden y el índice, no las páginas en sí.
- Es un paso explícito y conmutable en NextPDF, producido por una reconstrucción real en tres pasadas, no una bandera que cruza los dedos.
Cómo lo aborda NextPDF
Sección titulada «Cómo lo aborda NextPDF»No se puede adelantar una página al principio hasta saber exactamente cómo de grande es todo, porque la tabla de indicios registra desplazamientos de byte y un desplazamiento solo es correcto una vez que la longitud de cada objeto es definitiva. Esa circularidad —los desplazamientos dependen de los tamaños, los tamaños dependen de la maquetación— es la razón por la que un linealizador se ejecuta en pasadas en lugar de en una sola barrida.
NextPDF lo resuelve con una reconstrucción determinista en tres pasadas. La primera pasada mide, la segunda decide la colocación, la tercera escribe los bytes reales con los desplazamientos ya conocidos integrados.
- MEASURESerialise every object once to learn its exact byte length. Offsets are circular — they depend on sizes — so sizes are pinned first.
- PLACEDecide the order: first page and its dependencies up front, then the rest. Reserve space for the linearization parameter dictionary and the hint table.
- FILLWrite the final bytes. Each reserved field is filled with values computed after MEASURE and PLACE — the first-page length, the hint-table location, the main cross-reference offset — derived from the measured sizes and the chosen placement.
La salida lleva un diccionario de parámetros de linealización como primer objeto y una o más tablas de indicios que indexan las páginas, exactamente como prescribe el estándar (Spec: ISO 32000-2, Annex FISO 32000-2 Annex F). Esas tablas de indicios funcionan junto a una tabla de referencias cruzadas tradicional: registran los rangos y las ubicaciones de bytes que un lector necesita obtener, mientras que la tabla de referencias cruzadas es el índice que asigna cada número de objeto a su desplazamiento de byte exacto. El linealizador de NextPDF emite la forma clásica de tabla y elimina por el camino cualquier flujo de referencias cruzadas, de modo que, una vez que llega una porción, el lector resuelve un objeto por su desplazamiento directamente desde esa tabla (Spec: ISO 32000-2, §7.5.4ISO 32000-2 §7.5.4).
Un modelo mental útil: un PDF normal es un libro cuyo índice está pegado a la contraportada. Un PDF linealizado mueve esa página de índice al principio y añade un índice de números de página por página, de modo que se pueda abrir directamente cualquier página. Los capítulos no cambian. Solo se movió la navegación.
Ejemplo práctico
Sección titulada «Ejemplo práctico»La linealización es un paso explícito y conmutable. Usted la solicita; el motor realiza la reconstrucción y emite un archivo Fast-Web-View.
<?php
declare(strict_types=1);
use NextPDF\Core\Document;use NextPDF\Contracts\OutputDestination;
$document = Document::createStandalone();$document->setTitle('Annual Report');
for ($page = 1; $page <= 200; $page++) { $document->addPage(); $document->setFont('helvetica', '', 12); $document->cell(0, 12, "Page {$page}", newLine: true);}
// Linearization is requested explicitly — an operability choice, not a default.// enableLinearization() takes no arguments; it is the on-switch. The engine// runs the MEASURE -> PLACE -> FILL rebuild and emits a Fast-Web-View file// with the first page and hint table at the front.$document->enableLinearization();
$bytes = $document->output(dest: OutputDestination::String);El contenido de la página es exactamente el que usted creó. La diferencia está en el orden de archivo de los bytes que recibe, y en la tabla de indicios que ahora se sitúa cerca del principio.
El resultado se verifica como lo haría un desconocido: con un comprobador externo:
$ qpdf --check-linearization report.pdfreport.pdf: no linearization errorsqpdf --check-linearization no se limita a buscar una bandera. Vuelve a derivar
los desplazamientos que el archivo afirma y confirma que son ciertos: que los
objetos de la primera página están realmente donde dice el diccionario de
linealización, que la tabla de indicios apunta a los bytes correctos y que la
estructura se ajusta al Annex F. Un archivo que miente sobre su propia maquetación
no pasa esta comprobación aunque a primera vista parezca linealizado.
Concepto erróneo habitual
Sección titulada «Concepto erróneo habitual»La suposición frecuente es que la linealización comprime el archivo o hace la descarga más rápida en conjunto. No hace ninguna de las dos cosas. Un archivo linealizado suele ser unos pocos bytes más grande, porque lleva las tablas de indicios adicionales. El tiempo total de transferencia del documento completo es esencialmente el mismo.
Lo que cambia es cuándo aparece el primer píxel útil. La linealización optimiza el tiempo hasta la primera página, no el total de bytes. Es una función de latencia, no una función de compresión. Transmitir pronto la primera página y descargar el archivo rápidamente son objetivos distintos, y la linealización sirve al primero.
Un segundo concepto erróneo es que cualquier servidor web transmitirá un archivo linealizado. El lector necesita obtener rangos de bytes, lo que significa que el servidor debe respetar las solicitudes de rango HTTP. La mayoría lo hace, pero un servidor que siempre devuelve el archivo entero vuelve a convertir Fast Web View en una espera lenta de archivo completo: el archivo está listo para transmitirse, pero el transporte no.
Límites y fronteras
Sección titulada «Límites y fronteras»NextPDF tiene soporte de núcleo completo para producir archivos linealizados: un linealizador de tres pasadas de producción que emite el diccionario de parámetros y las tablas de indicios, y supera una comprobación externa del Annex F.
| Edition | Availability |
|---|---|
| Core | Full support. NextPDF produces linearized (Fast Web View) output through a production three-pass MEASURE → PLACE → FILL rebuild, conforming to ISO 32000-2 Annex F. |
| Pro | Not in this edition |
| Enterprise | Not in this edition |
Vale la pena nombrar dos fronteras. Primero, la linealización es una propiedad de una revisión. En el momento en que se añade una actualización incremental —una firma, el rellenado de un formulario, una edición— los bytes añadidos van al final y el archivo deja de estar estrictamente linealizado hasta que se reconstruye. Eso es un compromiso normal, no un defecto; consulte actualizaciones incrementales para ver por qué añadir es el comportamiento correcto en documentos firmados.
Segundo, el motor controla el archivo. No controla la red. Fast Web View solo cumple su promesa cuando la conexión que sirve respeta las solicitudes por rango de bytes; los bytes pueden estar perfectamente linealizados y aun así llegar como un único bloque lento si el servidor insiste en enviar el archivo entero.
Documentos relacionados
Sección titulada «Documentos relacionados»- La anatomía de un archivo PDF: la cabecera, el cuerpo, la tabla de referencias cruzadas y el tráiler que la linealización reordena. Léalo primero para ver qué se está reordenando.
- Memoria y transmisión: la transmisión del lado de la escritura, un eje distinto: cómo NextPDF mantiene plana la memoria mientras produce bytes, frente a cómo un lector los transmite.
- Actualizaciones incrementales y por qué importan : por qué una edición posterior se añade al final y qué significa eso para la maquetación adelantada al principio de un archivo linealizado.
- Flujos y filtros: qué vive dentro de los objetos del cuerpo a los que apunta la tabla de indicios, y cómo se comprimen.
Glosario
Sección titulada «Glosario»- Linealización: la reconstrucción que adelanta al principio la primera página y un índice de navegación para que un lector pueda renderizar y navegar antes de que llegue el archivo completo. El nombre que el estándar da al resultado.
- Fast Web View: el nombre de cara al usuario de un PDF linealizado; los dos términos describen el mismo archivo.
- Tabla de indicios: la estructura dentro de un archivo linealizado que registra los rangos y ubicaciones de bytes de cada página y de los objetos compartidos, de modo que un lector sepa qué porciones solicitar; la tabla de referencias cruzadas es lo que luego asigna un número de objeto a su desplazamiento de byte exacto.
- Diccionario de parámetros de linealización: el primer objeto de un archivo linealizado; declara los desplazamientos clave (longitud de la primera página, ubicación de la tabla de indicios, posición de la referencia cruzada principal) que hacen posible la obtención bajo demanda.
- Solicitud por rango de bytes: una solicitud HTTP de una porción de un archivo en lugar del archivo entero; el mecanismo de transporte del que depende Fast Web View.
- Tiempo hasta la primera página: cuánto tarda un lector en ver la primera página. La latencia que la linealización optimiza, distinta del tiempo total de descarga.