Ir al contenido

Solución de problemas: errores de validación de PDF/A y PDF/UA

Estas entradas cubren los errores que el motor genera al mantener un documento dentro del perfil PDF/A o PDF/UA. Los números de cláusula que aparecen a continuación son los que el motor cita en su propio código y en sus mensajes de excepción. Esta página los parafrasea. El motor informa de los errores de perfil que detecta; no certifica que un documento sea conforme. El veredicto de conformidad autorizado proviene de un validador externo que ejecuta su propio conjunto de reglas.

  • Síntoma. NextPDF\Security\Exception\IncompatiblePdfAModeException con un mensaje que indica que una operación de cifrado está prohibida en un modo PDF/A.
  • Causa probable. La canalización habilitó un modo PDF/A y, al mismo tiempo, solicitó cifrado. El motor cita ISO 19005-{1,2,3,4} §6.1.3: la clave Encrypt no debe estar presente en el tráiler de un archivo PDF/A. El motor lo trata como un rechazo absoluto, con independencia del orden de llamada.
  • Evidencia / diagnóstico. getContext() devuelve pdfa_mode y encryption_operation. La prueba de la ruta de fallo tests/SecurityScenarios/PdfAEncryptionRefusalTest.php verifica que el rechazo se dispara tanto si PDF/A se habilita antes como después de la llamada de cifrado.
  • Resolución.
    1. Decidir qué propiedad necesita el documento: conformidad de archivado o cifrado.
    2. Para un documento de archivado, eliminar la llamada de cifrado.
    3. Para un documento cifrado, eliminar la llamada que habilita PDF/A.
    4. Volver a ejecutar la canalización.
  • Relacionado. Cifrado y permisos.

Entrada: un filtro de imagen está prohibido en PDF/A-1

Sección titulada «Entrada: un filtro de imagen está prohibido en PDF/A-1»
  • Síntoma. Pdf14FeatureRejectedException generada durante el procesamiento de la imagen, con un mensaje que nombra /JPXDecode o /JBIG2Decode y la cláusula ISO 19005-1:2005 §6.1.13.
  • Causa probable. Una compilación PDF/A-1 procesó una imagen que usa un filtro introducido después de PDF 1.4. PDF/A-1 se basa en el conjunto de características de PDF 1.4, por lo que PdfA1FeatureGuard rechaza JPEG 2000 (/JPXDecode) y JBIG2 (/JBIG2Decode).
  • Evidencia / diagnóstico. src/Writer/PdfA1FeatureGuard.php mantiene la lista de filtros prohibidos y genera la excepción con la cláusula citada. La comprobación solo rechaza en el perfil PDF/A-1; PDF/A-2, PDF/A-3 y el perfil PDF 2.0 permiten esos filtros.
  • Resolución.
    1. Recodificar la imagen de origen sin JPEG 2000 ni JBIG2 (por ejemplo, volver a guardarla como un JPEG de línea base o como una imagen comprimida con Flate).
    2. Como alternativa, usar PDF/A-2 o PDF/A-3 como destino, ya que permiten esos filtros.
    3. Volver a ejecutar la compilación.
  • Relacionado. Referencia de conformidad.

Entrada: una fuente no está incrustada en PDF/A

Sección titulada «Entrada: una fuente no está incrustada en PDF/A»
  • Síntoma. Una compilación PDF/A falla durante el paso de validación de fuentes; un validador externo informa de una fuente sin incrustar.
  • Causa probable. Se dibujó un glifo con una fuente cuyo programa no está incrustado. El contrato del gestor de PDF/A establece que toda fuente debe estar incrustada; no se permite ninguna fuente standard-14 sin incrustación.
  • Evidencia / diagnóstico. src/Contracts/PdfAManagerInterface.php declara validateFont(string $fontName, bool $isEmbedded, array $cmapForward) con la regla documentada «All fonts must be embedded; no standard 14 fonts allowed without embedding.» La implementación concreta de la regla se entrega en nextpdf/pro.
  • Resolución.
    1. Identificar la fuente reportada como no incrustada.
    2. Configurar esa fuente con un archivo de programa incrustable en lugar de depender de una fuente standard-14 integrada.
    3. Para la interacción de sustitución de las Base 14, leer la entrada de fuentes y etiquetado.
    4. Volver a ejecutar la compilación y volver a validar.
  • Relacionado. Fuentes y etiquetado.

Entrada: hay JavaScript presente y la validación de PDF/A falla

Sección titulada «Entrada: hay JavaScript presente y la validación de PDF/A falla»
  • Síntoma. Una compilación PDF/A falla durante el paso de validación de JavaScript, o un validador externo informa de una acción de JavaScript.
  • Causa probable. El documento, o un campo de formulario, incluye una acción de JavaScript. El contrato del gestor de PDF/A cita ISO 19005-4:2020 §6.7.1, que prohíbe las acciones de JavaScript.
  • Evidencia / diagnóstico. PdfAManagerInterface::validateNoJavaScript() y validateNoJavaScriptActions() citan §6.7.1 en sus docblocks.
  • Resolución.
    1. Eliminar la acción de JavaScript del documento o del campo de formulario.
    2. Si la acción es necesaria para el comportamiento, el documento no puede ser PDF/A; producir una variante que no sea PDF/A para ese uso.
    3. Volver a ejecutar la compilación y volver a validar.
  • Relacionado. Referencia de conformidad.

Entrada: la salida etiquetada no anuncia PDF/UA-2

Sección titulada «Entrada: la salida etiquetada no anuncia PDF/UA-2»
  • Síntoma. Un documento compilado con el etiquetado habilitado no se reconoce como PDF/UA-2, o falta la declaración de PDF/UA-2.
  • Causa probable. El árbol de estructura está vacío. El motor no anuncia PDF/UA-2 para un documento que no contiene estructura etiquetada, porque un árbol de estructura vacío no satisface el perfil.
  • Evidencia / diagnóstico. La prueba de la ruta de fallo tests/Integration/Accessibility/EmptyTaggedPdfDoesNotAdvertisePdfUa2Test.php verifica que un documento etiquetado vacío no anuncia PDF/UA-2. Es el comportamiento documentado del motor, no un defecto.
  • Resolución.
    1. Confirmar que el contenido se emite a través de la ruta de etiquetado para que el árbol de estructura quede poblado y no vacío.
    2. Verificar que las secuencias de contenido marcado se asignan a elementos de estructura.
    3. Volver a ejecutar la compilación y volver a comprobar el estado de PDF/UA-2.
  • Relacionado. Fuentes y etiquetado.

Entrada: PDF/UA-2 falla por un idioma ausente o inválido

Sección titulada «Entrada: PDF/UA-2 falla por un idioma ausente o inválido»
  • Síntoma. Una comprobación de PDF/UA-2 falla porque una entrada de idioma está ausente o no es una etiqueta válida.
  • Causa probable. El documento o un elemento de estructura no declara un idioma válido. PDF/UA-2 exige una declaración de idioma natural; un valor Lang ausente o mal formado no supera la comprobación estricta.
  • Evidencia / diagnóstico. La prueba de la ruta de fallo tests/Unit/Conformance/PdfUa2Section844LangStrictTest.php cubre el requisito estricto de idioma. Las etiquetas de idioma se validan a través de src/Accessibility/Bcp47Validator.php; una etiqueta inválida genera src/Accessibility/InvalidBcp47TagException.php.
  • Resolución.
    1. Establecer un idioma a nivel de documento como una etiqueta BCP-47 válida, por ejemplo en-US o zh-Hant-TW.
    2. Cuando un pasaje esté en un idioma distinto, establecer el idioma en ese elemento de estructura.
    3. Volver a ejecutar la compilación y volver a validar.
  • Relacionado. Fuentes y etiquetado.
  • Los rechazos de PDF/A y PDF/UA descritos aquí se producen dentro del motor. Son independientes del veredicto de un validador externo y no lo reemplazan; ejecutar un validador como veraPDF para obtener el resultado autorizado.
  • El componente que escribe los objetos requeridos por PDF/A (flujo de metadatos XMP, output intent con un perfil ICC) se resuelve en tiempo de ejecución desde nextpdf/pro. Con solo el paquete core instalado, esos objetos no se emiten; una compilación solo con el core no es un productor de PDF/A completo.
  • El rechazo del cifrado es absoluto e independiente del orden: habilitar PDF/A después de la llamada de cifrado sigue generando el rechazo.

Glosario: output intent · árbol de estructura