Ir al contenido

PDF 2.0: qué ha cambiado

Evidence: Standard-backed

PDF 2.0 es ISO 32000-2. Es la primera especificación de PDF cuya titularidad corresponde íntegramente a ISO y no a Adobe. En su mayor parte, es una consolidación y limpieza de 1.7, no una reinvención drástica. Esta página explica qué cambió realmente, cuáles de esos cambios se notan en la práctica y cómo NextPDF toma como objetivo la línea base de 2.0 de forma predeterminada, aunque también puede escribir una estructura de archivo más antigua cuando un perfil lo exige.

«PDF 2.0» suena como si tuviera que ser un formato distinto. No lo es. Un archivo 2.0 usa el mismo modelo de objetos, la misma tabla de referencias cruzadas y el mismo tráiler que 1.7, por lo que es tentador subestimar los cambios reales. Los cambios que causan problemas no son las funciones más llamativas. Son los endurecimientos: reglas que eran opcionales en 1.7 y que ahora se esperan, y funciones que se eliminaron discretamente. Un documento que era un archivo 1.7 perfectamente válido puede ser un archivo 2.0 no conforme sin una sola diferencia visible.

La otra razón es la orientación técnica. NextPDF es un motor de PDF 2.0. Al saber qué espera 2.0 y dónde difiere deliberadamente de 1.7, se entiende por qué el motor rechaza algunas cosas, incrusta las fuentes con mayor rigor y usa de forma predeterminada un flujo de referencias cruzadas en lugar de una tabla.

  • PDF 2.0 = ISO 32000-2, con titularidad de ISO y basado en 1.7 (sin reemplazarlo).
  • La cabecera pasa a ser %PDF-2.0; un escritor conforme declara la versión como 2.0 en la cabecera o en el /Version del catálogo.
  • La mayor parte de la estructura del archivo permanece sin cambios: los mismos objetos indirectos, el mismo tráiler, la misma disciplina de startxref/%%EOF.
  • El flujo de referencias cruzadas es el valor predeterminado natural de 2.0; la clásica tabla de 20 bytes sigue siendo legal y algunos perfiles PDF/A aún la exigen.
  • 2.0 añade elementos (por ejemplo, una estructura más rica de archivos asociados y de partes del documento, un cifrado más fuerte mediante la extensión AES-256-GCM) y elimina otros (algunas etiquetas de estructura; expectativas más estrictas de incrustación de fuentes; colecciones de caracteres CJK obsoletas).
  • NextPDF toma 2.0 como objetivo predeterminado y puede serializar la estructura 1.7/1.4 cuando un perfil de conformidad lo requiere.

La versión es una decisión, expresada en un único lugar: la estrategia de serialización.

Pdf20StreamStrategy (src/Writer/Pdf20StreamStrategy.php) escribe la cabecera %PDF-2.0, informa /2.0 como versión del catálogo y emite un flujo comprimido de referencias cruzadas. También aplica directamente el endurecimiento de fuentes de 2.0. Con el perfil 2.0 puede exigir que una fuente Type 1 estándar esté incrustada, en lugar de limitarse a advertir sobre su ausencia, porque el estándar ahora espera que esas fuentes estén incrustadas. Las dos estrategias de tabla (Pdf17TableStrategy, Pdf14TableStrategy) existen precisamente porque algunos perfiles necesitan la forma más antigua. PDF/A-2/-3 imponen la tabla tradicional de referencias cruzadas, y PDF/A-1 prohíbe además los flujos de objetos y de referencias cruzadas. Las tres estrategias implementan una única interfaz, PdfSerializationStrategy, por lo que el escritor se mantiene idéntico por encima de ese punto de unión. Solo cambia la forma del tráiler/xref.

El cifrado más fuerte se integra con la misma deliberación. PdfXrefWriter (src/Writer/PdfXrefWriter.php) propaga una activación opcional de AES-256-GCM (la extensión ISO/TS 32003 a 2.0) hacia el diccionario de cifrado, de modo que las entradas de versión del controlador y de modo de cifrado emitidas coincidan con los bytes realmente producidos. El motor no anuncia un cifrado y escribe otro.

El diseño general es este: 2.0 es el valor predeterminado. La estructura más antigua se puede obtener de forma deliberada, nunca por accidente. Y donde 2.0 endurece una regla, NextPDF puede hacer cumplir esa regla endurecida en lugar de relajarla en silencio.

  1. Step 1 of 3: ISO 32000-1 PDF 1.7 — the Adobe-authored base, adopted by ISO
  2. Step 2 of 3: ISO 32000-2 PDF 2.0 — ISO-owned consolidation, tightening, and additions
  3. Step 3 of 3: ISO/TS 32003 AES-256-GCM (AESV4) — an encryption extension to PDF 2.0
El linaje de versiones de PDF sobre el que razona NextPDF: PDF 1.7 se convirtió en la base de ISO, ISO 32000-2 es PDF 2.0, e ISO/TS 32003 extiende 2.0 con cifrado AES-256-GCM.

La declaración de versión es normativa. Spec: ISO 32000-2, §7.5.2 establece que un procesador que escribe un archivo conforme deberá identificar la versión como 2.0 —ya sea en la cabecera o como entrada /Version del catálogo— y que la cabecera es %PDF-1.n o %PDF-2.n seguida de un único marcador de fin de línea. Spec: ISO 32000-2, §7.7.2 añade que el /Version del catálogo anula una versión anterior de la cabecera, que es exactamente lo que hace posible un incremento de versión incremental. Evidence: Standard-backed

Que 2.0 sea una consolidación y no una reescritura se aprecia en lo que conserva: el flujo de referencias cruzadas (/Type /XRef) es el mismo mecanismo introducido en PDF 1.5 y mantenido como valor predeterminado de 2.0 ( Spec: ISO 32000-2, §7.5.8 ). La estructura de objetos indirectos, tráiler y startxref no cambia con respecto a la descripción de la página anterior.

Los cambios que importan son eliminaciones y endurecimientos. El estándar deja constancia de que seis elementos de estructura estándar presentes en el espacio de nombres de estructura estándar de PDF 1.7 no forman parte del espacio de nombres de PDF 2.0: Art, BlockQuote, TOC, Reference, BibEntry y Code ( Spec: ISO 32000-2, Annex L.3 , con las diferencias de espacio de nombres definidas según Spec: ISO 32000-2, §14.8.6 ). También endurece las catorce fuentes Type 1 estándar: donde 1.0–1.7 permitían que sus diccionarios omitieran las entradas de métricas, 2.0 cierra esa concesión ( Spec: ISO 32000-2, §9.6.2.1 ). Además, revisa las colecciones predefinidas de caracteres CJK. Por ejemplo, Adobe-Korea1 queda obsoleta en 2.0. Se añade Adobe-KR. Ninguno de estos cambios altera el aspecto de una página existente. Todos ellos pueden cambiar si el archivo es conforme o no.

CategoríaEjemplos (2.0 frente a 1.7)¿Cambia la apariencia?Por qué importa
Sin cambiosObjetos indirectos, tráiler, startxref/%%EOF, flujos xref2.0 conserva el mismo modelo de objetos; la mayoría de las herramientas se mantiene
AñadidoEstructura más rica de archivos asociados / partes del documento; cifrado AES-256-GCM (ISO/TS 32003)NoNueva capacidad que se activa de forma opcional; los lectores más antiguos pueden ignorar lo que no entienden
EndurecidoLas fuentes Standard-14 se esperan incrustadas; las métricas ya no se pueden omitirNoUn archivo 1.7 válido puede ser un archivo 2.0 no conforme
EliminadoSeis elementos de estructura del espacio de nombres de 1.7 (Art, BlockQuote, TOC, Reference, BibEntry, Code); colecciones CJK obsoletas (por ejemplo, Adobe-Korea1)NoSin señales visibles: nada en la apariencia indica que se perdió la conformidad

Los cambios de PDF 2.0 que importan son, en su inmensa mayoría, invisibles: adiciones que se activan de forma opcional, y endurecimientos/eliminaciones que cambian la conformidad sin cambiar un solo píxel renderizado.

La única diferencia visible entre un archivo 2.0 y uno 1.7 suele reducirse a dos líneas —la cabecera y la versión del catálogo— aunque las reglas de conformidad que las respaldan difieran sustancialmente.

%PDF-2.0 % was %PDF-1.7
...
1 0 obj
<< /Type /Catalog /Version /2.0 % catalog states 2.0; overrides header if later
/Pages 2 0 R >>
endobj
...
% Cross-reference STREAM is the 2.0 default (was often a 20-byte table)
99 0 obj
<< /Type /XRef /Size 100 /W [1 2 2] /Filter /FlateDecode /Root 1 0 R >>
stream
<binary xref entries>
endstream
endobj
startxref
12345
%%EOF

Un lector ve %PDF-2.0 y un /Version /2.0. Lo que no ve —y lo que sí ve un verificador de conformidad— es que ahora se espera que este archivo incruste sus fuentes estándar y que no debe usar las etiquetas de estructura que 2.0 eliminó. Los bytes que cambian son pocos. Las reglas que cambian no lo son.

La trampa es esta: «emitimos PDF 2.0, así que somos más conformes que antes». Escribir %PDF-2.0 es una afirmación, no una garantía. Un archivo puede llevar la cabecera 2.0 y aun así incumplir 2.0 —al referenciar una fuente estándar no incrustada, o al usar una función que 2.0 eliminó— exactamente como se toleraba en 1.7. El marcador de versión eleva el listón con el que se mide el archivo. No eleva el archivo por encima de él. El error inverso es suponer que un archivo 1.7 funciona como 2.0 con solo cambiar la cabecera: por lo general se representa de forma idéntica y no supera la comprobación de conformidad, porque los endurecimientos son reales aunque no se vean.

Apuntar a la línea base de 2.0 significa que NextPDF usa de forma predeterminada la estructura de archivo de 2.0 y puede hacer cumplir las reglas endurecidas de 2.0. No significa que implemente cada función opcional de 2.0, ni que emitir una cabecera 2.0 certifique un documento como PDF/A, PDF/UA o cualquier otro perfil. Esos son objetivos de conformidad independientes y más estrictos, superpuestos a la especificación base, cada uno con su propia validación.

Esta página es una orientación práctica sobre las diferencias de versión, no un registro de cambios exhaustivo de ISO 32000-2 frente a 32000-1. Donde una función o una obsolescencia concreta de 2.0 gobierna el comportamiento del motor, ese comportamiento se vincula a su propia cláusula. Esta página traza el panorama en lugar de enumerar cada delta a nivel de cláusula.

¿Es PDF 2.0 retrocompatible con los lectores de 1.7? En gran medida, para la estructura que no cambia. Las nuevas funciones de 2.0 suelen diseñarse de modo que un lector más antiguo pueda ignorar lo que no entiende. Pero un lector de 1.7 no respetará una función exclusiva de 2.0.

¿Gana la cabecera o el /Version del catálogo? El /Version del catálogo tiene prioridad cuando nombra una versión posterior a la de la cabecera. Esto es lo que permite que una actualización incremental eleve la versión de un archivo sin reescribir la cabecera.

¿Por qué NextPDF usa de forma predeterminada un flujo de referencias cruzadas y no una tabla? El flujo de referencias cruzadas es el mecanismo natural de PDF 2.0: compacto y capaz de indexar objetos comprimidos. La tabla de 20 bytes todavía se escribe cuando lo requiere un perfil (en particular, algunos niveles de PDF/A).

  • PDF 2.0 — la especificación de PDF estandarizada como ISO 32000-2, la primera edición cuya titularidad corresponde a ISO y no a Adobe.
  • ISO 32000-1 — la estandarización ISO del PDF 1.7 de Adobe; la base sobre la que se construye PDF 2.0.
  • ISO/TS 32003 — una especificación técnica que extiende PDF 2.0 con cifrado AES-256-GCM (AESV4).
  • /Version del catálogo — la entrada del catálogo del documento que declara la versión de PDF; anula la cabecera cuando nombra una versión posterior.
  • Flujo de referencias cruzadas — el mecanismo de referencias cruzadas de PDF 1.5+ / 2.0 (/Type /XRef); el valor predeterminado de NextPDF, con la tabla clásica todavía disponible para los perfiles más antiguos.
  • Endurecimiento — una regla que era opcional o estaba permitida en 1.7 y que se espera o se exige en 2.0, cambiando la conformidad sin cambiar la apariencia.