CheckFileComplianceA

Conformità, ispezione dei documenti

Descrizione

Il suffisso A indica l'entry point DLL ANSI (char); l'interfaccia ActiveX/COM espone soltanto la forma Unicode. Il comportamento è identico a CheckFileCompliance e gli argomenti stringa vengono interpretati usando la code page corrente di SetAnsiMode

Legge un file PDF esterno e lo convalida rispetto allo standard di conformità ISO scelto. Il valore restituito è zero, se il file supera senza problemi il test scelto, oppure un handle StringListID diverso da zero che elenca tutti i problemi rilevati. Ogni voce dell'elenco comprende un codice breve, due punti e un messaggio leggibile, esattamente nello stesso formato di codice usato da GetPDFUADiagnostics. Enumerare il risultato tramite GetStringListCount e GetStringListItem

Il test PDF/A copre le sei modalità PDF/A-1a, 1b, 2a, 2b, 3a e 3b e legge le voci XMP pdfaid:part/pdfaid:conformance per scegliere le regole

Il test PDF/UA-1, aggiunto in v3.56.0, controlla un PDF esterno rispetto a ISO 14289-1 ed emette codici diagnostici nell'intervallo 10xxx, visivamente separati dai codici PDF/A 00xxx

Sintassi

Delphi

Function DLCheckFileComplianceA(InstanceID: Integer; InputFileName, Password: PAnsiChar; ComplianceTest, Options: Integer): Integer;

DLL

int DLCheckFileComplianceA(int InstanceID, const char * InputFileName, const char * Password, int ComplianceTest, int Options);

Parametri

InputFileNamePercorso completo del file PDF da convalidare. Il file viene aperto in sola lettura e non viene modificato
PasswordPassword per aprire il file; vuota se non cifrato. Un documento cifrato fallisce il test PDF/A (00006) anche con password corretta — PDF/A vieta la cifratura
ComplianceTestStandard da verificare.

1 — PDF/A (ISO 19005-1/-2/-3, tutti i sei livelli).
2 — PDF/UA-1 (ISO 14289-1:2014, PDF accessibile).
OptionsFlag di bit che modificano il test.

0 — Impostazione predefinita: segnala ogni problema rilevato nel documento.
1 — Si arresta dopo il primo problema e restituisce immediatamente il risultato. È utile quando il chiamante richiede solo un'indicazione di esito positivo o negativo

Valori restituiti

0Il file è conforme allo standard scelto
Non-zeroHandle StringListID le cui voci descrivono ogni non conformità rilevata. L'handle rimane valido finché il documento non viene chiuso o non viene chiamato ReleaseStringList

Codici dei problemi PDF/A (ComplianceTest = 1)

00002La versione PDF supera quella massima consentita dal livello di conformità, ossia 1.4 per PDF/A-1 e 1.7 per PDF/A-2 e PDF/A-3. La riga dei dettagli indica la versione non consentita e il massimo ammesso
00003Il Catalog contiene /OCProperties, vietato da PDF/A-1. PDF/A-2 e PDF/A-3 consentono livelli e non attivano questa verifica.
00005La coppia XMP pdfaid:part+pdfaid:conformance manca, è errata o fuori da 1A, 1B, 2A, 2B, 3A, 3B. Non essendo determinabile il set di regole, il problema è fatale indipendentemente da Options
00006Il documento è cifrato PDF/A vieta la cifratura in ogni parte
00007Il Catalog non contiene /OutputIntents. Tutte le parti PDF/A richiedono un output intent per definire senza ambiguità lo spazio colore.
00011Il Catalog non contiene una voce /MarkInfo. Richiesta soltanto per conformità di livello a (PDF/A-1a, 2a, 3a) — un PDF con tag deve dichiararsi.
00012Il Catalog non contiene /StructTreeRoot. Richiesto soltanto per conformità a. Un PDF con tag deve avere un albero logico.

Codici dei problemi PDF/UA-1 (ComplianceTest = 2)

10001Il flusso XMP non contiene pdfuaid:part oppure il valore non è 1. ISO 14289-1 §5 richiede questa identificazione e §6.2 vieta di dichiarare conformità senza di essa
10002Il Catalog non ha uno stream /Metadata. La dichiarazione PDF/UA-1 è registrata in questo stream; senza di esso il file non può dichiararsi accessibile.
10003Il dizionario /MarkInfo del Catalog è assente oppure /Marked non è true. ISO 14289-1 §7.1 richiede che ogni file conforme si dichiari come file con tag affinché le tecnologie assistive possano fare affidamento sull'albero della struttura
10004Il Catalog non contiene /StructTreeRoot. Un file PDF/UA-1 deve includere un albero logico che descriva ordine di lettura e semantica del documento's.
10005Il dizionario /ViewerPreferences manca oppure la voce /DisplayDocTitle non è true. ISO 14289-1 §7.1 richiede che i lettori conformi mostrino il titolo del documento nell'interfaccia della finestra anziché il nome file
10006La voce /Lang del Catalog manca o è vuota. ISO 14289-1 §7.2 e ISO 32000-1 §14.9.2 richiedono la lingua naturale per la corretta voce degli screen reader
10007Il flusso di metadati XMP non contiene un elemento Dublin Core dc:title non vuoto. ISO 14289-1 §7.1 richiede "una voce dc:title che identifichi chiaramente il documento"
10008Il dizionario /MarkInfo ha /Suspects su true. ISO 14289-1 §7.1 richiede un valore Suspects pari a false nei file PDF/UA; true segnala errori noti nei tag
10009Il /RoleMap rimappa tipi standard. ISO 14289-1 §7.1 vieta di rimappare i tag standard di ISO 32000-1 §14.8.4. I dettagli indicano il primo tag rimappato
10010Il file è cifrato ma il bit 10 della chiave /P (maschera 512, "Extract for accessibility") non è impostato. ISO 14289-1 §7.16 richiede l'estrazione accessibile nei file cifrati conformi
10011Rilevato modulo XFA dinamico: il pacchetto XDP contiene <dynamicRender>required</dynamicRender>. ISO 14289-1 §7.15 vieta XFA dinamico; XFA statico è consentito
10012È stato rilevato un Reference XObject, ossia un Form XObject contenente una voce /Ref. ISO 14289-1 §7.20 vieta i Reference XObject perché consentono a un PDF di incorporarne un altro per riferimento senza esporre il contenuto referenziato alle tecnologie assistive
10013Sono state rilevate annotazioni TrapNet. ISO 14289-1 §7.18.2 vieta esplicitamente TrapNet nei file conformi. La riga dei dettagli ne indica il numero
10014Una o più pagine contengono annotazioni ma non impostano /Tabs /S nel relativo dizionario. ISO 14289-1 §7.18.3 richiede che l'ordine di tabulazione segua l'albero della struttura, indicato da /Tabs /S. La riga dei dettagli riporta il numero di pagine interessate
10015In una o più annotazioni Link manca una descrizione /Contents non vuota. ISO 14289-1 §7.18.5 la richiede per consentire agli screen reader di annunciare la destinazione. I dettagli riportano il conteggio
10016Uno o più dizionari FileSpec dei file incorporati sono privi della chiave del nome file /F. ISO 14289-1 §7.11 richiede che ogni FileSpec di un file incorporato contenga sia /F sia /UF
10017In uno o più dizionari FileSpec dei file incorporati manca la chiave Unicode del nome file /UF. ISO 14289-1 §7.11 richiede che ogni FileSpec di un file incorporato contenga sia /F sia /UF
10018In uno o più dizionari di configurazione del contenuto facoltativo manca una stringa di testo /Name non vuota. ISO 14289-1 §7.10 richiede che ogni dizionario di configurazione OCG, inclusa la voce predefinita D e ogni dizionario in OCProperties/Configs, contenga un /Name non vuoto
10019Uno o più dizionari OCG contengono la chiave vietata /AS. ISO 14289-1 §7.10 vieta esplicitamente /AS per impedire regolazioni automatiche basate sull'uso
10020Uno o più caratteri diversi dai Standard-14 a cui fa riferimento il documento non incorporano il proprio programma, ossia nel FontDescriptor non è presente alcuna voce FontFile, FontFile2 o FontFile3. ISO 14289-1 §7.21.4.1 richiede che ogni carattere usato per il rendering incorpori il proprio programma. I caratteri Type 3 non sono sottoposti a questo controllo perché i loro glifi sono CharProcs inline
10021In uno o più discendenti CIDFontType2 manca /CIDToGIDMap. ISO 14289-1 §7.21.3.2 richiede che ogni CIDFont Type 2 incorporato contenga /CIDToGIDMap, come flusso di mappatura o nome Identity
10022Uno o più caratteri Standard 14, Helvetica, Times, Courier, Symbol, ZapfDingbats e le relative varianti grassetto o oblique, vengono referenziati senza incorporare il programma del carattere. La NOTA 5 di ISO 14289-1 §7.21.4 chiarisce che non è prevista alcuna esenzione dall'incorporamento per i 14 caratteri Type 1 standard
10023Uno o più caratteri sono privi di una CMap /ToUnicode e non corrispondono all'elenco delle esenzioni in §7.21.7. L'elenco comprende i valori predefiniti MacRomanEncoding / MacExpertEncoding / WinAnsiEncoding, i caratteri Type 0 il cui CIDFont discendente usa le raccolte di caratteri Adobe GB1 / CNS1 / Japan1 / Korea1 e i caratteri TrueType non simbolici
10024Il primo titolo nell'ordine documento non è H1 o H fortemente strutturato. ISO 14289-1 §7.4.2 richiede H1 come primo titolo.
10025Nell'ordine del documento sono stati rilevati uno o più salti di livello dei titoli, ad esempio un H1 seguito immediatamente da un H3, saltando H2. ISO 14289-1 §7.4.2 richiede che le sequenze discendenti dei titoli procedano in ordine numerico rigoroso senza saltare livelli intermedi
10026In una o più annotazioni Widget manca /StructParent. ISO 14289-1 §7.18.4 richiede l'annidamento in un tag Form; senza /StructParent il Widget non è raggiungibile. I dettagli indicano il conteggio
10027Una o più annotazioni Widget contengono una voce /StructParent, ma il valore non viene risolto tramite StructTreeRoot/ParentTree in un elemento della struttura con /S = Form. ISO 14289-1 §7.18.4 richiede che ogni annotazione Widget sia annidata in un tag della struttura Form. Possibili cause: la voce /ParentTree è completamente assente, punta a un elemento diverso da StructElem (numero intero non elaborato o dizionario MCR) oppure indica un tag diverso da Form
10028Uno o più caratteri TrueType non simbolici hanno un valore /Encoding, o /BaseEncoding nell'eventuale dizionario Encoding, diverso da MacRomanEncoding o WinAnsiEncoding. ISO 14289-1 §7.21.6 limita la codifica TrueType non simbolica a questi due nomi predefiniti
10029Uno o più font TrueType simbolici contengono una voce /Encoding nel dizionario dei font. Il quarto paragrafo di ISO 14289-1 §7.21.6 lo vieta — la codifica TrueType simbolica deve essere espressa esclusivamente tramite la tabella cmap del programma font incorporato's
10030Uno o più elementi di struttura L (elenco) sono privi dell'attributo ListNumbering. ISO 14289-1 §7.6 richiede che ogni tag L dichiari mediante tale attributo il proprio stile di numerazione. I valori validi sono None, Disc, Circle, Square, Decimal, UpperRoman, LowerRoman, UpperAlpha e LowerAlpha (ISO 32000-1 Table 347)
10031Una o più Link con azione URI hanno /IsMap true. ISO 14289-1 §7.18.5 vieta /IsMap = true salvo funzionalità equivalente altrove senza /IsMap. Gli autori con un uso legittimo devono sopprimere autonomamente la diagnostica
10032In uno o più elementi della struttura Note manca la voce /ID. ISO 14289-1 §7.9 richiede che ogni tag Note dichiari un /ID univoco, così i riferimenti incrociati possono raggiungere una destinazione stabile
10033Due o più elementi della struttura Note condividono lo stesso valore /ID. La riga dei dettagli indica il numero di coppie duplicate rilevate. ISO 14289-1 §7.9 richiede che gli ID delle Note siano univoci all'interno del documento
10034Uno o più programmi TrueType non simbolici (flag Symbolic azzerato nel FontDescriptor, flusso FontFile2 presente) incorporano una tabella cmap la cui unica sottotabella è la voce Microsoft simbolica (3,0). Il primo paragrafo di ISO 14289-1 §7.21.6 richiede almeno una sottotabella cmap non simbolica per renderizzare i punti di codice dichiarati da /Encoding
10035Uno o più font TrueType non simbolici dichiarano una voce /Encoding con un array /Differences contenente nomi di glifi che non appartengono ad Adobe Glyph List 2.0. .notdef è consentito perché la specifica lo ammette implicitamente. Il terzo paragrafo di ISO 14289-1 §7.21.6 richiede che ogni voce Differences appartenga ad AGL
10042In uno o più dizionari di dati dei clip multimediali, identificati da /S /MCD e facoltativamente /Type /MediaClip, manca la voce obbligatoria del tipo di contenuto /CT. ISO 14289-1 §7.18.6 rende obbligatoria questa chiave facoltativa della Tabella 274 di ISO 32000-1
10043Uno o più dizionari dei dati dei clip multimediali sono privi della matrice /Alt richiesta, contenente coppie lingua-stringa e testo alternativo. ISO 14289-1 §7.18.6 rende obbligatoria questa chiave facoltativa della tabella 274 di ISO 32000-1 affinché le tecnologie assistive possano annunciare una descrizione dei contenuti multimediali incorporati
10044Uno o più nodi dell'albero della struttura contengono più di un figlio H diretto, ossia un titolo generico. ISO 14289-1 §7.4.4 lo vieta espressamente: dividere la sezione oppure sostituire i tag H con livelli numerati H1..H6

Note

Il test PDF/A è un rapido autocontrollo prima della consegna. Rileva problemi di documento che squalificano il file, come versione errata, OutputIntent mancante, albero della struttura mancante al livello A, cifratura o livelli in PDF/A-1. not esamina ogni operatore né verifica incorporamento dei font e spazi colore per ogni oggetto; ciò richiede un validatore dedicato quale veraPDF. Usarlo come primo controllo e gate di regressione. Per rapporti riutilizzabili usare CreatePreflightReport o SavePreflightReport; per testo, JSON, HTML o CSV usare CreatePreflightReportEx o SavePreflightReportEx, oppure vedere Preflight Reports

L'API complementare GetPDFUADiagnostics esegue controlli analoghi per PDF/UA-1 (ISO 14289-1) sul documento in memoria in fase di creazione, anziché su un file esterno

Per produrre PDF/A, chiamare SetPDFAMode prima di aggiungere contenuto. Il gate di SetPDFAMode blocca le operazioni vietate, quindi il documento normalmente supera CheckFileCompliance

Esempio

// 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;

Vedere anche

Preflight Reports, CreatePreflightReport, CreatePreflightReportEx, SavePreflightReport, SavePreflightReportEx, ComparePreflightReports, SetPDFAMode, GetPDFUADiagnostics, GetStringListCount, GetStringListItem, SetPDFUAMode