CheckFileCompliance
Conformidade, inspeção de documentos
Seleção de perfil de leitor PDF/UA
As checagens de PDF/UA selecionam a parte 2 quando o XMP identifica pdfuaid:part=2 e, caso contrário, mantêm as checagens da parte 1; não se presume que as checagens legadas de PDF/UA-1 descritas aqui se apliquem à parte 2
O perfil PDF/UA-2 implementa checagens centrais de identificação, namespace, papéis e estrutura; relatórios estruturados usam PDF/UA-2 e ISO 14289-2 e divulgam fullCertification=false e o escopo não verificado
Use a CheckFilePDFUACompliance ou a RunPDFUAValidationPipelineTask para forçar uma parte alvo, e a GetPDFUAReadValidationCoverageJSON para inspecionar os limites de capacidade
Descrição
Lê um arquivo PDF externo e o valida em relação a um padrão de conformidade ISO escolhido. O valor retornado é zero (o arquivo passa limpamente no teste escolhido) ou um identificador StringListID não zero que lista cada problema detectado. Cada entrada da lista é um código curto, dois-pontos e uma mensagem legível — exatamente o mesmo formato de código usado por GetPDFUADiagnostics. Enumere o resultado com GetStringListCount e GetStringListItemO teste PDF/A cobre todos os seis modos de conformidade (PDF/A-1a, PDF/A-1b, PDF/A-2a, PDF/A-2b, PDF/A-3a, PDF/A-3b) e lê as entradas XMP
pdfaid:part/pdfaid:conformance para decidir qual conjunto de regras aplicarO teste PDF/UA-1 (adicionado em v3.56.0) verifica um PDF externo em relação à ISO 14289-1 e emite códigos de diagnóstico na faixa
O teste PDF/UA-1 (adicionado em v3.56.0) verifica um PDF externo contra a ISO 14289-1 e emite códigos de diagnóstico na faixa 10xxx para que permaneçam visualmente separados dos códigos 00xxx do PDF/A
Sintaxe
Delphi
Function TPDFlib.CheckFileCompliance(Const InputFileName, Password: WideString; ComplianceTest, Options: Integer): Integer;
ActiveX
Function PDFlib::CheckFileCompliance(InputFileName As String, Password As String, ComplianceTest As Long, Options As Long) As Long
DLL
int DLCheckFileCompliance(int InstanceID, const wchar_t * InputFileName, const wchar_t * Password, int ComplianceTest, int Options);
Parâmetros
| InputFileName | Caminho completo do arquivo PDF a validar. O arquivo é aberto somente para leitura e não é modificado. |
|---|---|
| Password | Senha usada para abrir o arquivo. Passe uma string vazia para documentos não criptografados. Observe que um documento criptografado falha no teste PDF/A (código 00006) independentemente de a senha correta ser fornecida — o PDF/A proíbe criptografia. |
| ComplianceTest | O padrão contra o qual verificar. 1 — PDF/A (ISO 19005-1/-2/-3, todos os seis níveis de conformidade). 2 — PDF/UA-1 (ISO 14289-1:2014, PDF acessível). 3 — PDF/X (ISO 15930, incluindo a família PDF/X-6). 4 — PDF/VT-3 (ISO 16612-3:2020 sobre uma base da família PDF/X-6). 5 — PDF/R-1 intercâmbio raster restrito. 6 — PDF/VCR-1 templates de substituição de conteúdo variável. 7 — PDF/E-1 intercâmbio de documentos de engenharia. |
| Options | Sinalizadores de bits que modificam o teste. 0 — Padrão: relata cada problema encontrado no documento. 1 — Para após o primeiro problema e retorna imediatamente. Útil quando o chamador precisa apenas de um sinal de aprovação/reprovação. |
Valores retornados
| 0 | O arquivo está em conformidade com o padrão escolhido. |
|---|---|
| Não zero | Um identificador StringListID cujas entradas descrevem cada não conformidade detectada. O identificador permanece válido até que o documento seja fechado ou ReleaseStringList seja chamada. |
Códigos de problemas PDF/A (ComplianceTest = 1)
| 00002 | A versão do PDF excede o máximo permitido pelo nível de conformidade (PDF/A-1 limita a 1.4; PDF/A-2 e PDF/A-3 limitam a 1.7). A linha de detalhe nomeia a versão infratora e o máximo permitido. |
|---|---|
| 00003 | O Catalog contém /OCProperties (conteúdo opcional / camadas), proibido pelo PDF/A-1. PDF/A-2 e PDF/A-3 permitem camadas e não acionam esta verificação. |
| 00005 | O par XMP pdfaid:part+pdfaid:conformance está ausente, malformado ou contém um valor fora do conjunto legal 1A, 1B, 2A, 2B, 3A, 3B. A biblioteca não pode determinar qual conjunto de regras aplicar, de modo que isso é relatado como um problema fatal independentemente de Options. |
| 00006 | O documento está criptografado. O PDF/A proíbe criptografia em todas as partes. |
| 00007 | O Catalog não tem entrada /OutputIntents. Todas as partes do PDF/A exigem um output intent para que o espaço de cores de renderização fique definido sem ambiguidade. |
| 00011 | O Catalog não tem entrada /MarkInfo. Exigido apenas para conformidade de nível a (PDF/A-1a, 2a, 3a) — o PDF marcado deve se declarar. |
| 00012 | O Catalog não tem entrada /StructTreeRoot. Exigido apenas para conformidade de nível a. Um documento PDF marcado deve ter uma árvore de estrutura lógica. |
Códigos de problemas PDF/UA-1 (ComplianceTest = 2)
| 10001 | O fluxo de metadados XMP não contém pdfuaid:part, ou o valor não é 1. ISO 14289-1 §5 exige que um arquivo em conformidade se identifique por meio desta propriedade; ISO 14289-1 §6.2 proíbe relatar conformidade sem ela. |
|---|---|
| 10002 | O Catalog do documento não tem fluxo /Metadata. Uma declaração de conformidade PDF/UA-1 é registrada dentro deste fluxo; sem ele o arquivo não pode se anunciar como acessível. |
| 10003 | O dicionário /MarkInfo do Catalog está ausente ou /Marked não é true. ISO 14289-1 §7.1 exige que todo arquivo em conformidade se declare como marcado, para que a tecnologia assistiva possa confiar na árvore de estrutura. |
| 10004 | O Catalog não tem entrada /StructTreeRoot. Um arquivo PDF/UA-1 deve incluir uma árvore de estrutura lógica descrevendo a ordem de leitura e a semântica do documento. |
| 10005 | O dicionário /ViewerPreferences está ausente ou sua entrada /DisplayDocTitle não é true. ISO 14289-1 §7.1 exige que leitores em conformidade exibam o título do documento na moldura de sua janela em vez do nome do arquivo. |
| 10006 | A entrada /Lang do Catalog está ausente ou vazia. ISO 14289-1 §7.2 (referindo-se a ISO 32000-1 §14.9.2) exige que todo arquivo em conformidade declare seu idioma natural, para que leitores de tela selecionem as regras corretas de voz e pronúncia. |
| 10007 | O fluxo de metadados XMP não traz um dc:title do Dublin Core não vazio. ISO 14289-1 §7.1 exige "a dc:title entry which clearly identifies the document". |
| 10008 | O dicionário /MarkInfo tem /Suspects definido como true. ISO 14289-1 §7.1: arquivos que declaram conformidade PDF/UA devem ter um valor Suspects de false — um valor true marca a marcação como sabidamente contendo erros. |
| 10009 | O /RoleMap do documento remapeia um ou mais tipos de estrutura padrão. ISO 14289-1 §7.1: tags padrão definidas em ISO 32000-1 §14.8.4 (P, H1..H6, Figure, Table etc.) não devem ser remapeadas. A linha de detalhe nomeia a primeira tag padrão que foi remapeada. |
| 10010 | O arquivo está criptografado, mas o bit 10 da chave de permissão de criptografia /P (máscara 512, "Extract for accessibility") não está definido. ISO 14289-1 §7.16 exige que todo arquivo criptografado em conformidade permita extração para acessibilidade, para que a tecnologia assistiva possa alcançar o conteúdo. |
| 10011 | Um formulário XFA dinâmico foi detectado: o pacote XDP XFA contém <dynamicRender>required</dynamicRender>. ISO 14289-1 §7.15 proíbe formulários XFA dinâmicos em arquivos em conformidade; XFA estático é permitido. |
| 10012 | Um Reference XObject (Form XObject que traz uma entrada /Ref) foi detectado. ISO 14289-1 §7.20 proíbe reference XObjects porque permitem que um PDF incorpore outro por referência sem expor o conteúdo referenciado à tecnologia assistiva. |
| 10013 | Uma ou mais anotações TrapNet foram detectadas. ISO 14289-1 §7.18.2 proíbe explicitamente TrapNet em arquivos em conformidade. A linha de detalhe informa quantas anotações foram encontradas. |
| 10014 | Uma ou mais páginas trazem anotações, mas não definem /Tabs /S em seu dicionário de página. ISO 14289-1 §7.18.3 exige que a ordem de tabulação nessas páginas siga a árvore de estrutura, o que é sinalizado por /Tabs /S. A linha de detalhe informa a contagem de páginas infratoras. |
| 10015 | Uma ou mais anotações Link carecem de uma descrição alternativa /Contents não vazia. ISO 14289-1 §7.18.5 exige que cada anotação Link traga uma descrição acessível, para que leitores de tela possam anunciar o destino do link. A linha de detalhe informa a contagem de anotações Link infratoras. |
| 10016 | Um ou mais dicionários FileSpec de arquivo incorporado carecem da chave de nome de arquivo /F. ISO 14289-1 §7.11 exige que todo FileSpec de arquivo incorporado traga tanto /F quanto /UF. |
| 10017 | Um ou mais dicionários FileSpec de arquivo incorporado carecem da chave de nome de arquivo Unicode /UF. ISO 14289-1 §7.11 exige que todo FileSpec de arquivo incorporado traga tanto /F quanto /UF. |
| 10018 | Um ou mais dicionários de configuração de conteúdo opcional carecem de uma string de texto /Name não vazia. ISO 14289-1 §7.10 exige que todo dicionário de configuração OCG (a entrada padrão D mais cada dicionário em OCProperties/Configs) traga um /Name não vazio. |
| 10019 | Um ou mais dicionários de configuração de conteúdo opcional contêm a chave proibida /AS. ISO 14289-1 §7.10 proíbe explicitamente /AS em qualquer dicionário de configuração OCG, para evitar ajustes automáticos de estado orientados por informações de uso. |
| 10020 | Uma ou mais fontes fora do Standard 14 referenciadas pelo documento não incorporam seu programa de fonte (nenhuma entrada FontFile, FontFile2 ou FontFile3 no FontDescriptor). ISO 14289-1 §7.21.4.1 exige que toda fonte usada para renderização incorpore seu programa. Fontes Type 3 pulam esta verificação porque seus glifos são CharProcs inline. |
| 10021 | Um ou mais descendentes CIDFontType2 carecem da entrada /CIDToGIDMap. ISO 14289-1 §7.21.3.2 exige que todo CIDFont Type 2 incorporado traga /CIDToGIDMap (seja como um fluxo que mapeia CIDs para índices de glifo, seja como o nome Identity). |
| 10022 | Uma ou mais fontes Standard 14 (Helvetica, Times, Courier, Symbol, ZapfDingbats e suas variantes bold / oblique) são referenciadas sem um programa de fonte incorporado. ISO 14289-1 §7.21.4 NOTE 5 deixa claro que não há isenção de incorporação para as 14 fontes Type 1 padrão. |
| 10023 | Uma ou mais fontes carecem de um CMap /ToUnicode e não correspondem à lista de isenções de §7.21.7. A lista de isenções cobre as codificações predefinidas MacRomanEncoding / MacExpertEncoding / WinAnsiEncoding, fontes Type 0 cujo CIDFont descendente usa as coleções de caracteres Adobe GB1 / CNS1 / Japan1 / Korea1 e fontes TrueType não simbólicas. |
| 10024 | O primeiro elemento de título na ordem do documento não é H1 (ou o H fortemente estruturado). ISO 14289-1 §7.4.2: "If any heading tags are used, H1 shall be the first." |
| 10025 | Foram detectados um ou mais saltos de nível de título na ordem do documento — por exemplo, um H1 imediatamente seguido por um H3, pulando H2. ISO 14289-1 §7.4.2 exige que sequências decrescentes de títulos progridam em ordem numérica estrita sem pular níveis intermediários. |
| 10026 | Uma ou mais anotações Widget carecem de uma entrada /StructParent. ISO 14289-1 §7.18.4 exige que anotações Widget estejam aninhadas dentro de uma tag de estrutura Form; sem /StructParent o Widget não pode de forma alguma ser alcançado a partir da árvore de estrutura. A linha de detalhe informa a contagem. |
| 10027 | Uma ou mais anotações Widget têm uma entrada /StructParent, mas o valor não resolve por meio de StructTreeRoot/ParentTree para um elemento de estrutura com /S = Form. ISO 14289-1 §7.18.4 exige que toda anotação Widget esteja aninhada dentro de uma tag de estrutura Form. Causas possíveis: a entrada /ParentTree está totalmente ausente, aponta para um não StructElem (inteiro bruto / dicionário MCR) ou nomeia uma tag que não é Form. |
| 10028 | Uma ou mais fontes TrueType não simbólicas têm /Encoding (ou o /BaseEncoding de um dicionário Encoding) que não é MacRomanEncoding nem WinAnsiEncoding. ISO 14289-1 §7.21.6 restringe a codificação TrueType não simbólica a esses dois nomes predefinidos. |
| 10029 | Uma ou mais fontes TrueType simbólicas trazem uma entrada /Encoding no dicionário de fonte. ISO 14289-1 §7.21.6, quarto parágrafo, proíbe isso — a codificação TrueType simbólica deve ser expressa apenas por meio da tabela cmap do programa de fonte incorporado. |
| 10030 | Um ou mais elementos de estrutura L (lista) carecem do atributo ListNumbering. ISO 14289-1 §7.6 exige que toda tag L declare seu estilo de numeração por meio deste atributo. Os valores válidos são None, Disc, Circle, Square, Decimal, UpperRoman, LowerRoman, UpperAlpha e LowerAlpha (ISO 32000-1 Table 347). |
| 10031 | Uma ou mais anotações Link trazem um dicionário de ação URI cuja entrada /IsMap é true. ISO 14289-1 §7.18.5 proíbe /IsMap = true em uma ação URI, a menos que funcionalidade equivalente seja fornecida em outro lugar do conteúdo sem uma chave /IsMap. Autores com um caso de uso legítimo de IsMap devem suprimir este diagnóstico por conta própria. |
| 10032 | Um ou mais elementos de estrutura Note carecem da entrada /ID. ISO 14289-1 §7.9 exige que toda tag Note declare um /ID único, para que referências cruzadas possam aterrissar em um alvo estável. |
| 10033 | Dois ou mais elementos de estrutura Note compartilham o mesmo valor de /ID. A linha de detalhe informa o número de pares duplicados detectados. ISO 14289-1 §7.9 exige que os IDs de Note sejam únicos dentro do documento. |
| 10034 | Um ou mais programas TrueType não simbólicos (FontDescriptor com o sinalizador Symbolic limpo, fluxo FontFile2 presente) incorporam uma tabela cmap cuja única subtable é a entrada simbólica (3,0) da Microsoft. ISO 14289-1 §7.21.6, primeiro parágrafo, exige pelo menos uma subtabela cmap não simbólica, para que o programa possa renderizar os codepoints declarados por seu /Encoding. |
| 10035 | Uma ou mais fontes TrueType não simbólicas declaram um /Encoding com um array /Differences contendo nomes de glifo que não são membros da Adobe Glyph List 2.0. .notdef está na lista de permissões porque a especificação implicitamente o permite. ISO 14289-1 §7.21.6, terceiro parágrafo, exige que cada entrada Differences caia na AGL. |
| 10036 | Uma ou mais larguras de fontes TrueType simples diferem das métricas correspondentes no programa de fonte incorporado em mais de um milésimo de em. ISO 14289-1 §7.21.5 exige que o array /Widths concorde com as métricas de glifo incorporadas. |
| 10037 | Uma ou mais larguras de CIDFontType2 diferem das métricas correspondentes no programa TrueType incorporado em mais de um milésimo de em. ISO 14289-1 §7.21.5 exige que o array /W concorde com as métricas de glifo incorporadas. |
| 10038 | Um descritor de fonte Type 1 /CharSet omite um ou mais nomes de glifo presentes em seu programa de fonte incorporado. ISO 14289-1 §7.21.4.2 exige que a entrada enumere cada glifo incorporado. |
| 10039 | Um descritor de fonte CID /CIDSet omite um ou mais CIDs que mapeiam para glifos em seu programa de fonte incorporado. ISO 14289-1 §7.21.4.2 exige que o conjunto de bits identifique cada CID incorporado. |
| 10040 | Um Form XObject contendo texto é invocado a partir do conteúdo da página fora de conteúdo marcado. ISO 14289-1 §7.20 exige que o conteúdo de Form XObject seja incorporado a elementos de estrutura. |
| 10041 | Um ou mais operandos de exibição de texto resolvem para o glifo .notdef. ISO 14289-1 §7.21.8 proíbe referências a .notdef independentemente do modo de renderização de texto. |
| 10042 | Um ou mais dicionários de dados de media clip (identificados por /S /MCD, opcionalmente /Type /MediaClip) carecem da entrada de tipo de conteúdo /CT obrigatória. ISO 14289-1 §7.18.6 promove esta chave opcional de ISO 32000-1 Table 274 a obrigatória. |
| 10043 | Um ou mais dicionários de dados de media clip carecem do array /Alt obrigatório (pares de string de idioma + texto alternativo). ISO 14289-1 §7.18.6 promove esta chave opcional de ISO 32000-1 Table 274 a obrigatória, para que a tecnologia assistiva possa anunciar uma descrição da multimídia incorporada. |
| 10044 | Um ou mais nós da árvore de estrutura trazem mais de um filho H (título genérico) direto. ISO 14289-1 §7.4.4 proíbe explicitamente isso — divida a seção ou substitua as tags H por níveis H1..H6 numerados. |
Observações
O teste PDF/A destina-se a uma rápida autoverificação antes da entrega. Ele captura os problemas no nível do documento que desqualificam um arquivo de imediato (versão de PDF errada, OutputIntent ausente, árvore de estrutura ausente no nível A, criptografia, camadas no PDF/A-1). Ele não percorre cada operador de fluxo de conteúdo nem verifica a incorporação de fontes ou as referências de espaço de cores para cada objeto pintado — essas validações exigem um validador PDF/A dedicado (como o veraPDF). Use esta função como uma verificação de primeira linha e como um portão de regressão em pipelines de build. Use CreatePreflightReport ou SavePreflightReport quando quiser que a biblioteca formate as listas de problemas em um relatório de texto reutilizável. Use CreatePreflightReportEx ou SavePreflightReportEx para saída de relatório em texto, JSON, HTML ou CSV, ou consulte Preflight Reports para o fluxo de trabalho completo de relatóriosA API companheira
GetPDFUADiagnostics executa verificações análogas para PDF/UA (ISO 14289-1) sobre o documento em memória em construção no momento, em vez de sobre um arquivo externoAo produzir saída PDF/A com esta biblioteca, chame
SetPDFAMode antes de adicionar qualquer conteúdo. A guarda de geração dentro de SetPDFAMode bloqueia as operações proibidas pela parte escolhida, de modo que um documento construído assim normalmente passará em CheckFileCompliance automaticamente
Exemplo
// Validate a delivered PDF/A file and print all issues
var
Issues, Count, I: Integer;
begin
Issues := PDF.CheckFileCompliance('archive.pdf', '', 1, 0);
if Issues = 0 then
WriteLn('archive.pdf: PDF/A conformant')
else
begin
Count := PDF.GetStringListCount(Issues);
WriteLn('archive.pdf: ', Count, ' PDF/A issue(s) detected:');
for I := 1 to Count do
WriteLn(' ', PDF.GetStringListItem(Issues, I));
end;
end;
// Fast pass/fail gate in a CI pipeline — stop on the first issue
var
Failed: Boolean;
begin
Failed := PDF.CheckFileCompliance('build/output.pdf', '', 1, 1) <> 0;
if Failed then
Halt(1);
end;Veja também
Preflight Reports, CreatePreflightReport, CreatePreflightReportEx, SavePreflightReport, SavePreflightReportEx, ComparePreflightReports, SetPDFAMode, GetPDFUADiagnostics, GetStringListCount, GetStringListItem, SetPDFUAMode
O teste de conformidade 3 audita PDF/X (ISO 15930): identificação da edição, output intent, geometria de página, fontes embutidas e o conjunto de recursos proibidos; para PDF/X-6 também valida flags de anotação e aparências fixas, aparências AcroForm e de assinatura, exclusões de XFA e de aparências geradas pelo visualizador, posicionamento de ações, cadeias de ações, o conjunto de ações nomeadas permitidas e todo valor UseBlackPtComp
O teste de conformidade 4 audita os metadados de identificação PDF/VT-3, sua base da família PDF/X-6, o grafo DPartRoot e DPart, nomes e valores DPM, nível de registro, ordem de páginas e cobertura exata de folhas; as verificações compostas compartilham uma única passada de parser
O teste de conformidade 5 audita posicionamento, versão e criptografia de marcadores PDF/R-1, objetos indiretos de geração zero, dicionários e filtros restritos, programas de página em stream único, faixas raster ordenadas, codificações de imagem, cobertura de página e resolução efetiva; ele pode reutilizar uma passada de pipeline de validação compartilhado
O teste de conformidade 6 audita a fundação PDF/X e a identificação XMP do PDF/VCR-1, a raiz de template direta única, os campos declarados, o campo opcional de seleção de página e cada placeholder de substituição PassThrough folha, vínculo de página, MCID e bounding box; ele pode reutilizar uma passada de pipeline de validação compartilhado
O teste de conformidade 7 audita a identificação e os metadados de ciclo de vida do PDF/E-1, identificadores do trailer, criptografia permitida, output intents e espaços de cor de dispositivo, operadores de conteúdo, fontes, anotações, formulários, conteúdo opcional, ações, referências a arquivos externos, estados gráficos e restrições de streams 3D; ele pode reutilizar uma passada de pipeline de validação compartilhado