ISO 19005-4 (PDF/A-4): asignación funcional de NextPDF
De un vistazo
Sección titulada «De un vistazo»ISO 19005-4:2020 (PDF/A-4) es el perfil de archivado de PDF 2.0. Esta página establece su correspondencia con NextPDF de forma explícita: qué emite el núcleo, qué añade la extensión nextpdf/pro y qué queda fuera de la cobertura explícita de NextPDF. NextPDF emite estructuras relevantes para PDF/A-4; solo un validador puede afirmar que un archivo es conforme.
Instalación
Sección titulada «Instalación»composer require nextpdf/core:^3# PDF/A-4 file authoring (OutputIntent + ICC + XMP) requires:# composer require nextpdf/proResumen conceptual
Sección titulada «Resumen conceptual»ISO 19005-4:2020 se basa en ISO 32000-2:2020 (PDF 2.0), a diferencia de PDF/A-2 y PDF/A-3, que se basan en ISO 32000-1:2008 (PDF 1.7). NextPDF codifica esta diferencia de linaje en ConformanceMode::requiresPdf17(). Este método devuelve false para todos los casos de PDF/A-4 y true para PDF/A-2 y PDF/A-3.
PDF/A-4 define tres formas de conformidad. El perfil base no tiene letra pdfa:conformance. PDF/A-4e (anexo B, contenido de ingeniería / 3D) establece pdfa:conformance = E. PDF/A-4f (anexo A, archivos incrustados) establece pdfa:conformance = F. ISO 19005-4:2020 §6.7.3 especifica el esquema de identificación de PDF/A en el espacio de nombres de AIIM. Indica que un archivo que no es conforme ni con PDF/A-4e ni con PDF/A-4f no proporciona ninguna entrada pdfa:conformance. NextPDF lo refleja exactamente en ConformanceMode::pdfaConformanceLetter(): PdfA4 devuelve la cadena vacía, PdfA4e devuelve E, PdfA4f devuelve F.
El límite crítico entre ediciones es el siguiente: la creación de archivos PDF/A-4 —el diccionario OutputIntent, el perfil ICC incrustado, el esquema de extensión XMP, las garantías sobre subconjuntos de fuentes y la prohibición de cifrado— está implementada en el PdfAManager de Enterprise. El PdfAManager de Enterprise se incluye en la extensión nextpdf/pro. En una instalación que solo incluye el núcleo, Document::enablePdfA() lanza InvalidConfigException porque la capacidad security.pdfa no está registrada. El ejemplo ejecutable (examples/32-pdfa4-icc.php) lo demuestra sondeando el registro de capacidades y mostrando un mensaje claro en lugar de un volcado de pila.
Por lo tanto, solo con el núcleo, la superficie de PDF/A-4 se limita únicamente al discriminador: NextPDF registra qué variante de PDF/A-4 declara un documento. NextPDF emite los marcadores pdfaid:part = 4 / pdfa:conformance definidos por el esquema. Producir un archivo PDF/A-4 completo —y validar que es conforme— son pasos distintos. El primer paso requiere nextpdf/pro. El segundo paso requiere veraPDF.
Superficie de la API
Sección titulada «Superficie de la API»| Superficie | Edición | Qué proporciona |
|---|---|---|
ConformanceMode::PdfA4 / PdfA4e / PdfA4f | core | El discriminador de variante |
ConformanceMode::pdfaPart() → 4 | core | Número de parte de ISO 19005 |
ConformanceMode::pdfaConformanceLetter() → '' / 'E' / 'F' | core | Letra de conformidad del §6.7.3 |
ConformanceMode::requiresPdf17() → false | core | Control del linaje PDF 2.0 |
Document::enablePdfA() | pro | Creación de OutputIntent + ICC + XMP; lanza InvalidConfigException en el núcleo |
Ejemplo de código — Inicio rápido
Sección titulada «Ejemplo de código — Inicio rápido»<?php
declare(strict_types=1);
use NextPDF\Conformance\ConformanceMode;
// Core: introspect the declared PDF/A-4f contract.$mode = ConformanceMode::PdfA4f;$mode->pdfaPart(); // 4$mode->pdfaConformanceLetter(); // 'F' (ISO 19005-4:2020 §6.7.3 / Annex A)$mode->requiresPdf17(); // false (PDF/A-4 is PDF 2.0 lineage)Ejemplo de código — Producción
Sección titulada «Ejemplo de código — Producción»<?php
declare(strict_types=1);
use NextPDF\Core\Document;use NextPDF\Exception\InvalidConfigException;use NextPDF\Support\CapabilityRegistry;
// PDF/A-4 file authoring requires the Premium extension. Probe first so a// Core-only install gets a clear rationale, not a stack trace.$registry = CapabilityRegistry::getInstance();if (!$registry->get('security.pdfa')->isAvailable()) { throw new InvalidConfigException( configKey: 'security.pdfa', givenValue: 'Core-only install', expectedType: 'nextpdf/pro extension (Enterprise PdfAManager)', );}
$doc = Document::createStandalone();$doc->enablePdfA(); // Emits OutputIntent + ICC + pdfaid XMP (Premium).// … write content …$doc->save(__DIR__ . '/out/archive-a4.pdf');
// The file now CARRIES PDF/A-4 structures. Conformance is still unproven// until veraPDF asserts it://// verapdf --flavour 4 out/archive-a4.pdfCasos límite y trampas
Sección titulada «Casos límite y trampas»- El núcleo no puede crear un archivo PDF/A-4.
enablePdfA()lanza una excepción en el núcleo. Solo el discriminador y los marcadores XMP forman parte de la superficie del núcleo. - El PDF/A-4 base no emite
pdfa:conformance. Según ISO 19005-4:2020 §6.7.3, solo PDF/A-4e y PDF/A-4f establecen la letra.ConformanceMode::PdfA4devuelve la cadena vacía por diseño. - Linaje PDF 2.0, no PDF 1.7. Un error común es reutilizar una canalización de PDF/A-3 y esperar
%PDF-1.7. PDF/A-4 es PDF 2.0;requiresPdf17()devuelvefalseen todos los casos de PDF/A-4. - La validación de ICC es Premium. La validación de ICC del OutputIntent de ISO 19005-4:2020 §6.2.2 (número mágico
acsp, tabla de etiquetas, punto blanco D50) es tarea delPdfAManagerde Enterprise, no del núcleo. - La biblioteca no certifica el archivo. Establecer
PdfA4fy emitir los marcadores no convierte la salida en un archivo PDF/A-4f válido. Ejecutar veraPDF.
Rendimiento
Sección titulada «Rendimiento»La superficie de PDF/A-4 del núcleo es introspección pura de tipos de valor (despacho match de enum, O(1), sin asignación de memoria). La ruta de creación de Premium añade el OutputIntent y el paquete ICC durante la escritura. Su costo es el tamaño del perfil incrustado, gestionado dentro del presupuesto del escritor. La validación con veraPDF es un paso externo, no parte de la generación.
Notas de seguridad
Sección titulada «Notas de seguridad»PDF/A-4 prohíbe el cifrado. El PdfAManager de Enterprise impone el invariante de prohibición de cifrado. El PdfAManager de Enterprise ordena este invariante con respecto a enablePdfA() para que el código llamador no pueda combinar accidentalmente AES-GCM con el modo de archivado. La protección anticipada del núcleo en HasSecurity::enablePdfA() rechaza la combinación no admitida antes de que se escriba ningún byte. Consultar el modelo de amenazas del proyecto para conocer el detalle de la canalización de archivado.
Conformidad
Sección titulada «Conformidad»Esto es una asignación de funciones, no una declaración de conformidad.
| Área de ISO 19005-4:2020 | Cláusula | Cobertura de NextPDF | Estado |
|---|---|---|---|
| Esquema de identificación de variante | §6.7.3 | ConformanceMode emite pdfaid:part = 4 y la letra pdfa:conformance correspondiente | Reivindicado (núcleo; cubierto por pruebas unitarias en tests/Unit/Conformance/) |
| Control de linaje PDF 2.0 | §6.7.3 / base | requiresPdf17() devuelve false en todos los casos de PDF/A-4 | Verificado (probado con pruebas unitarias) |
| OutputIntent + ICC incrustado | §6.2.2 | Enterprise PdfAManager (nextpdf/pro) | Solo Premium (no el núcleo) |
| Esquema de extensión XMP, subconjuntos de fuentes, prohibición de cifrado | §6 / anexo A/B | Enterprise PdfAManager (nextpdf/pro) | Solo Premium (no el núcleo) |
| Determinación de conformidad | Cláusula 5 | No la realiza NextPDF — veraPDF | Sin cobertura explícita |
La compatibilidad no es conformidad, y esta página separa ambas deliberadamente. (a) NextPDF Core emite las estructuras que ISO 19005-4:2020 §6.7.3 define para la identificación de variante; esto es implementación, evidenciada por tests/Unit/Conformance/ConformanceModePdfAVariantTest.php (que se supera). (b) Que un archivo sea conforme a PDF/A-4 es una aseveración aparte que solo un validador puede hacer, según ISO 19005-4:2020 cláusula 5. La cláusula 5 establece que la determinación efectiva de la conformidad la realiza una herramienta de comprobación frente a los requisitos normativos. NextPDF hace la afirmación (a). NextPDF no hace la afirmación (b). Validar con veraPDF (verapdf --flavour 4 …, o php oracle/run.php para el arnés del oráculo, que solo se ejecuta cuando el binario de veraPDF está presente, un control opcional).
Las frases «PDF/A-4 compliant», «fully conformant» y «PDF/A-4 certified» están deliberadamente ausentes de esta página. NextPDF emite estructuras relevantes para PDF/A-4; no garantiza un archivo conforme.
Las citas se han parafraseado a partir del corpus de cumplimiento de NextPDF. Los resúmenes reference_id completos de 64 caracteres se registran en el encabezado de la página y en docs/public/modules/core/_normative-evidence-conf.md.
Véase también
Sección titulada «Véase también»- Módulo de conformidad — enrutamiento de
ConformanceModey oráculo de veraPDF - Módulo de cumplimiento — validador PDF/R-1 y gramática Arlington
- Asignación de la especificación PDF/UA-2 — el perfil de accesibilidad equivalente