Pular para o conteúdo

Solução de problemas: falhas de validação de PDF/A e PDF/UA

Estas entradas cobrem falhas que o engine gera ao manter um documento em um perfil Portable Document Format/Archive (PDF/A) ou Portable Document Format/Universal Accessibility (PDF/UA). Os números de cláusula abaixo vêm do código-fonte do engine e das mensagens de exceção. Esta página os apresenta em paráfrase. O engine relata as falhas de perfil que detecta; ele não certifica a conformidade do documento. Use um validador externo, com seu próprio conjunto de regras, para o veredito de conformidade definitivo.

  • Sintoma. NextPDF\Security\Exception\IncompatiblePdfAModeException com uma mensagem que diz que uma operação de criptografia é proibida em um modo PDF/A.
  • Causa provável. O pipeline habilitou um modo PDF/A e solicitou criptografia. O engine cita a International Organization for Standardization (ISO) 19005-{1,2,3,4} §6.1.3: a chave Encrypt não deve estar presente no trailer de um arquivo PDF/A. O engine recusa essa combinação de forma absoluta, independentemente da ordem das chamadas.
  • Evidência / diagnóstico. getContext() retorna pdfa_mode e encryption_operation. O teste do caminho de falha tests/SecurityScenarios/PdfAEncryptionRefusalTest.php verifica que a recusa é disparada independentemente de você habilitar o PDF/A antes ou depois da chamada de criptografia.
  • Resolução.
    1. Decida o que o documento precisa: conformidade de arquivamento ou criptografia.
    2. Para um documento de arquivamento, remova a chamada de criptografia.
    3. Para um documento criptografado, remova a chamada que habilita o PDF/A.
    4. Execute o pipeline novamente.
  • Relacionado. Criptografia e permissões.

Entrada: o filtro de imagem é proibido em PDF/A-1

Seção intitulada “Entrada: o filtro de imagem é proibido em PDF/A-1”
  • Sintoma. Pdf14FeatureRejectedException durante a ingestão da imagem, com uma mensagem que cita /JPXDecode ou /JBIG2Decode e a cláusula ISO 19005-1:2005 §6.1.13.
  • Causa provável. Uma build PDF/A-1 processou uma imagem que usa um filtro introduzido após o PDF 1.4. O PDF/A-1 tem como alvo o conjunto de recursos do PDF 1.4; por isso, o PdfA1FeatureGuard rejeita Joint Photographic Experts Group (JPEG) 2000 (/JPXDecode) e JBIG2 (/JBIG2Decode).
  • Evidência / diagnóstico. src/Writer/PdfA1FeatureGuard.php contém a lista de filtros proibidos e gera a cláusula citada. O guard rejeita esses filtros apenas no perfil PDF/A-1; o PDF/A-2, o PDF/A-3 e o perfil PDF 2.0 os permitem.
  • Resolução.
    1. Recodifique a imagem de origem sem JPEG 2000 ou JBIG2. Por exemplo, salve-a novamente como um JPEG baseline ou uma imagem comprimida com Flate.
    2. Como alternativa, gere em PDF/A-2 ou PDF/A-3, que permitem esses filtros.
    3. Execute a build novamente.
  • Relacionado. Referência de conformidade.

Entrada: uma fonte não está incorporada em PDF/A

Seção intitulada “Entrada: uma fonte não está incorporada em PDF/A”
  • Sintoma. Uma build em PDF/A falha na validação de fontes, ou um validador externo relata uma fonte não incorporada.
  • Causa provável. Um glifo foi desenhado com uma fonte cujo programa não está incorporado. O contrato do gerenciador PDF/A determina que toda fonte deve ser incorporada e que nenhuma fonte standard-14 é permitida sem incorporação.
  • Evidência / diagnóstico. src/Contracts/PdfAManagerInterface.php declara validateFont(string $fontName, bool $isEmbedded, array $cmapForward) e documenta a regra: toda fonte deve ser incorporada e nenhuma fonte standard 14 é permitida sem incorporação. A imposição concreta é distribuída em nextpdf/pro.
  • Resolução.
    1. Identifique a fonte relatada como não incorporada.
    2. Configure essa fonte com um arquivo de programa que possa ser incorporado, em vez de depender de uma face standard-14 embutida.
    3. Para entender a interação com a substituição de Base 14, leia a entrada sobre fontes e marcação.
    4. Execute a build novamente e revalide.
  • Relacionado. Fontes e marcação.

Entrada: JavaScript está presente e a validação de PDF/A falha

Seção intitulada “Entrada: JavaScript está presente e a validação de PDF/A falha”
  • Sintoma. Uma build em PDF/A falha na validação de JavaScript, ou um validador externo relata uma ação JavaScript.
  • Causa provável. O documento ou um campo de formulário carrega uma ação JavaScript. O contrato do gerenciador PDF/A cita a ISO 19005-4:2020 §6.7.1, que proíbe ações JavaScript.
  • Evidência / diagnóstico. PdfAManagerInterface::validateNoJavaScript() e validateNoJavaScriptActions() citam o §6.7.1 em seus docblocks.
  • Resolução.
    1. Remova a ação JavaScript do documento ou do campo de formulário.
    2. Se a ação for necessária para o funcionamento, o documento não pode ser PDF/A. Produza uma variante não PDF/A para esse uso.
    3. Execute a build novamente e revalide.
  • Relacionado. Referência de conformidade.

Entrada: a saída marcada (tagged) não anuncia PDF/UA-2

Seção intitulada “Entrada: a saída marcada (tagged) não anuncia PDF/UA-2”
  • Sintoma. Um documento construído com a marcação (tagging) habilitada não é reconhecido como PDF/UA-2, ou sua declaração de PDF/UA-2 está ausente.
  • Causa provável. A árvore de estrutura está vazia. O engine não anuncia PDF/UA-2 para um documento sem estrutura marcada (tagged), porque uma árvore de estrutura vazia não satisfaz o perfil.
  • Evidência / diagnóstico. O teste do caminho de falha tests/Integration/Accessibility/EmptyTaggedPdfDoesNotAdvertisePdfUa2Test.php verifica que um documento marcado (tagged) vazio não anuncia PDF/UA-2. Esse é um comportamento documentado do engine, não um defeito.
  • Resolução.
    1. Confirme que o conteúdo é emitido pelo caminho de marcação (tagging), de modo que a árvore de estrutura seja preenchida em vez de ficar vazia.
    2. Verifique se as sequências de marked-content são mapeadas para elementos de estrutura.
    3. Execute a build novamente e verifique outra vez o status de PDF/UA-2.
  • Relacionado. Fontes e marcação.

Entrada: o PDF/UA-2 falha por um idioma ausente ou inválido

Seção intitulada “Entrada: o PDF/UA-2 falha por um idioma ausente ou inválido”
  • Sintoma. Uma verificação de PDF/UA-2 falha porque uma entrada de idioma está ausente ou não é uma tag válida.
  • Causa provável. O documento ou um elemento de estrutura não define um idioma válido. O PDF/UA-2 exige uma declaração de idioma natural; um valor de Lang ausente ou malformado faz a verificação estrita falhar.
  • Evidência / diagnóstico. O teste do caminho de falha tests/Unit/Conformance/PdfUa2Section844LangStrictTest.php testa o requisito estrito de idioma. As tags de idioma são validadas por meio de src/Accessibility/Bcp47Validator.php; uma tag inválida lança src/Accessibility/InvalidBcp47TagException.php.
  • Resolução.
    1. Defina um idioma no nível do documento como uma tag Best Current Practice (BCP) 47 válida, por exemplo, en-US ou zh-Hant-TW.
    2. Quando uma passagem estiver em um idioma diferente, defina o idioma nesse elemento de estrutura.
    3. Execute a build novamente e revalide.
  • Relacionado. Fontes e marcação.
  • As recusas de PDF/A e PDF/UA descritas aqui são produzidas dentro do engine. Elas são independentes do veredito de um validador externo e não o substituem. Execute um validador como o veraPDF para obter o resultado definitivo.
  • O writer concreto de objetos obrigatórios de PDF/A (stream de metadados Extensible Metadata Platform (XMP), output intent com um perfil International Color Consortium (ICC)) é resolvido em tempo de execução a partir de nextpdf/pro. Com apenas o pacote core instalado, esses objetos não são emitidos; uma build apenas com o core não é um produtor de PDF/A completo.
  • A recusa de criptografia é absoluta e independente da ordem; habilitar o PDF/A após a chamada de criptografia ainda gera a recusa.

Glossário: output intent · árvore de estrutura