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
| InputFileName | Percorso completo del file PDF da convalidare. Il file viene aperto in sola lettura e non viene modificato |
|---|---|
| Password | Password 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 |
| ComplianceTest | Standard da verificare. 1 — PDF/A (ISO 19005-1/-2/-3, tutti i sei livelli). 2 — PDF/UA-1 (ISO 14289-1:2014, PDF accessibile). |
| Options | Flag 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
| 0 | Il file è conforme allo standard scelto |
|---|---|
| Non-zero | Handle 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)
| 00002 | La 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 |
|---|---|
| 00003 | Il Catalog contiene /OCProperties, vietato da PDF/A-1. PDF/A-2 e PDF/A-3 consentono livelli e non attivano questa verifica. |
| 00005 | La 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 |
| 00006 | Il documento è cifrato PDF/A vieta la cifratura in ogni parte |
| 00007 | Il Catalog non contiene /OutputIntents. Tutte le parti PDF/A richiedono un output intent per definire senza ambiguità lo spazio colore. |
| 00011 | Il Catalog non contiene una voce /MarkInfo. Richiesta soltanto per conformità di livello a (PDF/A-1a, 2a, 3a) — un PDF con tag deve dichiararsi. |
| 00012 | Il 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)
| 10001 | Il 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 |
|---|---|
| 10002 | Il Catalog non ha uno stream /Metadata. La dichiarazione PDF/UA-1 è registrata in questo stream; senza di esso il file non può dichiararsi accessibile. |
| 10003 | Il 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 |
| 10004 | Il Catalog non contiene /StructTreeRoot. Un file PDF/UA-1 deve includere un albero logico che descriva ordine di lettura e semantica del documento's. |
| 10005 | Il 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 |
| 10006 | La 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 |
| 10007 | Il 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" |
| 10008 | Il 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 |
| 10009 | Il /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 |
| 10010 | Il 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 |
| 10011 | Rilevato 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 |
| 10013 | Sono state rilevate annotazioni TrapNet. ISO 14289-1 §7.18.2 vieta esplicitamente TrapNet nei file conformi. La riga dei dettagli ne indica il numero |
| 10014 | Una 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 |
| 10015 | In 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 |
| 10016 | Uno 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 |
| 10017 | In 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 |
| 10018 | In 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 |
| 10019 | Uno o più dizionari OCG contengono la chiave vietata /AS. ISO 14289-1 §7.10 vieta esplicitamente /AS per impedire regolazioni automatiche basate sull'uso |
| 10020 | Uno 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 |
| 10021 | In 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 |
| 10022 | Uno 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 |
| 10023 | Uno 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 |
| 10024 | Il primo titolo nell'ordine documento non è H1 o H fortemente strutturato. ISO 14289-1 §7.4.2 richiede H1 come primo titolo. |
| 10025 | Nell'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 |
| 10026 | In 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 |
| 10027 | Una 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 |
| 10028 | Uno 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 |
| 10029 | Uno 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 |
| 10030 | Uno 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) |
| 10031 | Una 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 |
| 10032 | In 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 |
| 10033 | Due 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 |
| 10034 | Uno 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 |
| 10035 | Uno 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 |
| 10042 | In 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 |
| 10043 | Uno 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 |
| 10044 | Uno 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