CheckFileCompliance

Conformità, ispezione dei documenti

Selezione del profilo reader PDF/UA

I controlli PDF/UA selezionano la parte 2 quando XMP identifica pdfuaid:part=2 e altrimenti mantengono i controlli della parte 1; i controlli legacy PDF/UA-1 descritti in questa pagina non sono automaticamente applicabili alla parte 2

Il profilo PDF/UA-2 implementa i controlli essenziali di identificazione, spazio dei nomi, ruoli e struttura; i report strutturati usano PDF/UA-2 e ISO 14289-2 e dichiarano fullCertification=false e l'ambito non verificato

Usa CheckFilePDFUACompliance oppure RunPDFUAValidationPipelineTask per imporre una parte target e GetPDFUAReadValidationCoverageJSON per esaminare i limiti delle capacità

Descrizione

Legge un file PDF esterno e lo valida rispetto a uno standard di conformità ISO scelto. Il valore restituito è zero (il file supera pulitamente il test scelto) oppure un handle StringListID diverso da zero che elenca ogni problema rilevato. Ogni voce dell'elenco è un codice breve, due punti e un messaggio leggibile — esattamente lo stesso formato di codice usato da GetPDFUADiagnostics. Enumerare il risultato con GetStringListCount e GetStringListItemIl test PDF/A copre tutte e sei le modalità di conformità (PDF/A-1a, PDF/A-1b, PDF/A-2a, PDF/A-2b, PDF/A-3a, PDF/A-3b) e legge le voci XMP

pdfaid:part/pdfaid:conformance per decidere quale insieme di regole applicareIl test PDF/UA-1 (aggiunto in v3.56.0) verifica un PDF esterno rispetto a ISO 14289-1 ed emette codici diagnostici nell'intervallo

10xxx, così che restino visivamente separati dai codici PDF/A 00xxx

Sintassi

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

Parametri

InputFileNamePercorso completo del file PDF da validare. Il file viene aperto in sola lettura e non viene modificato.
PasswordPassword usata per aprire il file. Passare una stringa vuota per i documenti non cifrati. Si noti che un documento cifrato non supera il test PDF/A (codice 00006) indipendentemente dal fatto che la password corretta sia stata fornita — PDF/A vieta la cifratura.
ComplianceTestLo standard rispetto a cui verificare.

1 — PDF/A (ISO 19005-1/-2/-3, tutti e sei i livelli di conformità).
2 — PDF/UA-1 (ISO 14289-1:2014, PDF accessibile).
3 — PDF/X (ISO 15930, inclusa la famiglia PDF/X-6).
4 — PDF/VT-3 (ISO 16612-3:2020 su una base della famiglia PDF/X-6).
5 — PDF/R-1, scambio raster vincolato.
6 — PDF/VCR-1, modelli di sostituzione con contenuto variabile.
7 — PDF/E-1, scambio di documenti di ingegneria.
OptionsFlag binari che modificano il test.

0 — Predefinito: riporta ogni problema rilevato nel documento.
1 — Si ferma dopo il primo problema e restituisce immediatamente. Utile quando il chiamante ha bisogno solo di un segnale superato/non superato.

Valori restituiti

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

Codici dei problemi PDF/A (ComplianceTest = 1)

00002La versione del PDF supera il massimo consentito dal livello di conformità (PDF/A-1 si ferma a 1.4; PDF/A-2 e PDF/A-3 si fermano a 1.7). La riga di dettaglio indica la versione in questione e il massimo consentito.
00003Il Catalog contiene /OCProperties (contenuto opzionale / livelli), vietato da PDF/A-1. PDF/A-2 e PDF/A-3 consentono i livelli e non attivano questo controllo.
00005La coppia XMP pdfaid:part+pdfaid:conformance manca, è malformata o contiene un valore al di fuori dell'insieme ammesso 1A, 1B, 2A, 2B, 3A, 3B. La libreria non può determinare quale insieme di regole applicare, quindi il problema viene segnalato come fatale indipendentemente da Options.
00006Il documento è cifrato. PDF/A vieta la cifratura in ogni parte.
00007Il Catalog non ha una voce /OutputIntents. Tutte le parti di PDF/A richiedono un output intent affinché lo spazio colore di rendering sia definito senza ambiguità.
00011Il Catalog non ha una voce /MarkInfo. Richiesta solo per la conformità di livello a (PDF/A-1a, 2a, 3a) — il PDF con tag deve dichiararsi tale.
00012Il Catalog non ha una voce /StructTreeRoot. Richiesta solo per la conformità di livello a. Un documento PDF con tag deve avere un albero di struttura logica.

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

10001Il flusso di metadati XMP non contiene pdfuaid:part, oppure il valore non è 1. ISO 14289-1 §5 richiede che un file conforme si identifichi tramite questa proprietà; ISO 14289-1 §6.2 vieta di dichiarare la conformità senza di essa.
10002Il Catalog del documento non ha un flusso /Metadata. La dichiarazione di conformità PDF/UA-1 viene registrata all'interno di questo flusso; senza di esso il file non può annunciarsi come accessibile.
10003Il dizionario /MarkInfo del Catalog manca oppure /Marked non è true. ISO 14289-1 §7.1 richiede che ogni file conforme si dichiari con tag, affinché la tecnologia assistiva possa affidarsi all'albero della struttura.
10004Il Catalog non ha una voce /StructTreeRoot. Un file PDF/UA-1 deve includere un albero di struttura logica che descriva l'ordine di lettura e la semantica del documento.
10005Il dizionario /ViewerPreferences manca oppure la sua voce /DisplayDocTitle non è true. ISO 14289-1 §7.1 richiede che i lettori conformi mostrino il titolo del documento nella cornice della finestra invece del nome del file.
10006La voce /Lang del Catalog manca o è vuota. ISO 14289-1 §7.2 (con riferimento a ISO 32000-1 §14.9.2) richiede che ogni file conforme dichiari la propria lingua naturale, così che i lettori di schermo selezionino la voce e le regole di pronuncia corrette.
10007Il flusso di metadati XMP non riporta un dc:title Dublin Core non vuoto. ISO 14289-1 §7.1 richiede «una voce dc:title che identifichi chiaramente il documento».
10008Il dizionario /MarkInfo ha /Suspects impostato a true. ISO 14289-1 §7.1: i file che dichiarano la conformità PDF/UA devono avere un valore Suspects pari a false — un valore true indica che la codifica con tag è nota contenere errori.
10009Il /RoleMap del documento rimappa uno o più tipi di struttura standard. ISO 14289-1 §7.1: i tag standard definiti in ISO 32000-1 §14.8.4 (P, H1..H6, Figure, Table, ecc.) non devono essere rimappati. La riga di dettaglio indica il primo tag standard rimappato.
10010Il file è cifrato, ma il bit 10 della chiave di permessi /P della cifratura (maschera 512, «Extract for accessibility») non è impostato. ISO 14289-1 §7.16 richiede che ogni file conforme cifrato consenta l'estrazione per l'accessibilità, così che la tecnologia assistiva possa raggiungere il contenuto.
10011È stato rilevato un modulo XFA dinamico: il pacchetto XDP XFA contiene <dynamicRender>required</dynamicRender>. ISO 14289-1 §7.15 vieta i moduli XFA dinamici nei file conformi; l'XFA statico è consentito.
10012È stato rilevato un Reference XObject (Form XObject che porta una voce /Ref). ISO 14289-1 §7.20 vieta i reference XObject perché permettono a un PDF di incorporarne un altro per riferimento senza esporre il contenuto referenziato alla tecnologia assistiva.
10013Sono state rilevate una o più annotazioni TrapNet. ISO 14289-1 §7.18.2 vieta esplicitamente TrapNet nei file conformi. La riga di dettaglio riporta quante annotazioni sono state trovate.
10014Una o più pagine portano annotazioni ma non impostano /Tabs /S nel loro dizionario di pagina. ISO 14289-1 §7.18.3 richiede che l'ordine di tabulazione su tali pagine segua l'albero della struttura, cosa segnalata da /Tabs /S. La riga di dettaglio riporta il numero di pagine in questione.
10015Una o più annotazioni Link sono prive di una descrizione alternativa /Contents non vuota. ISO 14289-1 §7.18.5 richiede che ogni annotazione Link porti una descrizione accessibile, così che i lettori di schermo possano annunciare la destinazione del link. La riga di dettaglio riporta il numero di annotazioni Link in questione.
10016Uno o più dizionari FileSpec di file incorporati sono privi della chiave del nome file /F. ISO 14289-1 §7.11 richiede che ogni FileSpec di file incorporato porti sia /F sia /UF.
10017Uno o più dizionari FileSpec di file incorporati sono privi della chiave del nome file Unicode /UF. ISO 14289-1 §7.11 richiede che ogni FileSpec di file incorporato porti sia /F sia /UF.
10018Uno o più dizionari di configurazione del contenuto opzionale sono privi di una stringa di testo /Name non vuota. ISO 14289-1 §7.10 richiede che ogni dizionario di configurazione OCG (la voce predefinita D più ogni dizionario in OCProperties/Configs) porti una /Name non vuota.
10019Uno o più dizionari di configurazione del contenuto opzionale contengono la chiave vietata /AS. ISO 14289-1 §7.10 vieta esplicitamente /AS in qualsiasi dizionario di configurazione OCG, per impedire regolazioni automatiche di stato guidate dalle informazioni d'uso.
10020Uno o più font non Standard-14 referenziati dal documento non incorporano il loro programma di font (nessuna voce FontFile, FontFile2 o FontFile3 sul FontDescriptor). ISO 14289-1 §7.21.4.1 richiede che ogni font usato per il rendering incorpori il proprio programma. I font Type 3 saltano questo controllo perché i loro glifi sono CharProcs inline.
10021Uno o più discendenti CIDFontType2 sono privi della voce /CIDToGIDMap. ISO 14289-1 §7.21.3.2 richiede che ogni CIDFont Type 2 incorporato porti /CIDToGIDMap (come flusso che mappa i CID agli indici dei glifi, o come nome Identity).
10022Uno o più font Standard 14 (Helvetica, Times, Courier, Symbol, ZapfDingbats e le loro varianti bold / oblique) sono referenziati senza un programma di font incorporato. ISO 14289-1 §7.21.4 NOTE 5 chiarisce che non esiste alcuna esenzione dall'incorporamento per i 14 font Type 1 standard.
10023Uno o più font sono privi di una CMap /ToUnicode e non rientrano nell'elenco di esenzioni di §7.21.7. L'elenco di esenzioni copre le codifiche predefinite MacRomanEncoding / MacExpertEncoding / WinAnsiEncoding, i font Type 0 il cui CIDFont discendente usa le collezioni di caratteri Adobe GB1 / CNS1 / Japan1 / Korea1 e i font TrueType non simbolici.
10024Il primo elemento di intestazione in ordine di documento non è H1 (o la H fortemente strutturata). ISO 14289-1 §7.4.2: «Se vengono usati tag di intestazione, H1 deve essere il primo».
10025Sono stati rilevati uno o più salti di livello di intestazione in ordine di documento — ad esempio un H1 seguito immediatamente da un H3, saltando H2. ISO 14289-1 §7.4.2 richiede che le sequenze di intestazioni discendenti procedano in ordine numerico rigoroso senza saltare i livelli intermedi.
10026Una o più annotazioni Widget sono prive della voce /StructParent. ISO 14289-1 §7.18.4 richiede che le annotazioni Widget siano annidate in un tag di struttura Form; senza /StructParent il widget non può in alcun modo essere raggiunto dall'albero della struttura. La riga di dettaglio riporta il conteggio.
10027Una o più annotazioni Widget hanno una voce /StructParent, ma il valore non si risolve attraverso StructTreeRoot/ParentTree in un elemento di struttura con /S = Form. ISO 14289-1 §7.18.4 richiede che ogni annotazione Widget sia annidata in un tag di struttura Form. Cause possibili: la voce /ParentTree manca del tutto, punta a un non-StructElem (intero grezzo o dizionario MCR) oppure nomina un tag diverso da Form.
10028Uno o più font TrueType non simbolici hanno /Encoding (o la /BaseEncoding di un dizionario Encoding) che non è 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 portano una voce /Encoding nel dizionario del font. ISO 14289-1 §7.21.6 quarto paragrafo lo vieta — la codifica TrueType simbolica deve essere espressa solo attraverso la tabella cmap del programma di font incorporato.
10030Uno o più elementi di struttura L (elenco) sono privi dell'attributo ListNumbering. ISO 14289-1 §7.6 richiede che ogni tag L dichiari il proprio stile di numerazione tramite questo attributo. I valori validi sono None, Disc, Circle, Square, Decimal, UpperRoman, LowerRoman, UpperAlpha e LowerAlpha (ISO 32000-1 Table 347).
10031Una o più annotazioni Link portano un dizionario di azione URI la cui voce /IsMap è true. ISO 14289-1 §7.18.5 vieta /IsMap = true su un'azione URI a meno che una funzionalità equivalente sia fornita altrove nel contenuto senza chiave /IsMap. Gli autori con un caso d'uso legittimo di IsMap dovrebbero sopprimere questo diagnostico da soli.
10032Uno o più elementi di struttura Note sono privi della voce /ID. ISO 14289-1 §7.9 richiede che ogni tag Note dichiari una /ID univoca, così che i riferimenti incrociati possano puntare a una destinazione stabile.
10033Due o più elementi di struttura Note condividono lo stesso valore /ID. La riga di dettaglio riporta il numero di coppie duplicate rilevate. ISO 14289-1 §7.9 richiede che gli ID Note siano univoci nel documento.
10034Uno o più programmi TrueType non simbolici (FontDescriptor con flag Symbolic azzerato, flusso FontFile2 presente) incorporano una tabella cmap la cui unica sottotabella è la voce Microsoft simbolica (3,0). ISO 14289-1 §7.21.6 primo paragrafo richiede almeno una sottotabella cmap non simbolica, così che il programma possa renderizzare i codepoint dichiarati dalla sua /Encoding.
10035Uno o più font TrueType non simbolici dichiarano una /Encoding con un array /Differences che contiene nomi di glifi non presenti nell'Adobe Glyph List 2.0. .notdef è in lista bianca perché la specifica lo consente implicitamente. ISO 14289-1 §7.21.6 terzo paragrafo richiede che ogni voce Differences cada nell'AGL.
10036Le larghezze di uno o più font TrueType semplici differiscono dalle metriche corrispondenti nel programma di font incorporato di più di un millesimo di em. ISO 14289-1 §7.21.5 richiede che l'array /Widths concordi con le metriche dei glifi incorporate.
10037Le larghezze di uno o più CIDFontType2 differiscono dalle metriche corrispondenti nel programma TrueType incorporato di più di un millesimo di em. ISO 14289-1 §7.21.5 richiede che l'array /W concordi con le metriche dei glifi incorporate.
10038Un descrittore di font Type 1 /CharSet omette uno o più nomi di glifi presenti nel suo programma di font incorporato. ISO 14289-1 §7.21.4.2 richiede che la voce enumeri ogni glifo incorporato.
10039Un descrittore di font CID /CIDSet omette uno o più CID che mappano a glifi nel suo programma di font incorporato. ISO 14289-1 §7.21.4.2 richiede che l'insieme di bit identifichi ogni CID incorporato.
10040Un Form XObject contenente testo viene invocato dal contenuto della pagina al di fuori del contenuto contrassegnato. ISO 14289-1 §7.20 richiede che il contenuto dei Form XObject sia incorporato negli elementi di struttura.
10041Uno o più operandi di mostrare-testo si risolvono nel glifo .notdef. ISO 14289-1 §7.21.8 vieta i riferimenti a .notdef indipendentemente dalla modalità di rendering del testo.
10042Uno o più dizionari di dati di clip multimediale (identificati da /S /MCD, opzionalmente /Type /MediaClip) sono privi della richiesta voce /CT del tipo di contenuto. ISO 14289-1 §7.18.6 promuove a obbligatoria questa chiave opzionale di ISO 32000-1 Table 274.
10043Uno o più dizionari di dati di clip multimediale sono privi del richiesto array /Alt (coppie stringa di lingua + testo alternativo). ISO 14289-1 §7.18.6 promuove a obbligatoria questa chiave opzionale di ISO 32000-1 Table 274, così che la tecnologia assistiva possa annunciare una descrizione per i contenuti multimediali incorporati.
10044Uno o più nodi dell'albero della struttura portano più di un figlio H (intestazione generica) diretto. ISO 14289-1 §7.4.4 lo vieta esplicitamente — dividere la sezione, oppure sostituire i tag H con livelli numerati H1..H6.

Note

Il test PDF/A è pensato come una rapida autoverifica prima della consegna. Individua i problemi a livello di documento che squalificano immediatamente un file (versione PDF errata, OutputIntent mancante, albero di struttura mancante al livello A, cifratura, livelli in PDF/A-1). Non attraversa ogni operatore dei flussi di contenuto né verifica l'incorporamento dei font o i riferimenti agli spazi colore per ogni oggetto disegnato — quelle validazioni richiedono un validatore PDF/A dedicato (come veraPDF). Usare questa funzione come controllo di prima linea e come cancello di regressione nelle pipeline di build. Usare CreatePreflightReport o SavePreflightReport quando si vuole che la libreria formatti gli elenchi di problemi in un report testuale riutilizzabile. Usare CreatePreflightReportEx o SavePreflightReportEx per output di report in testo, JSON, HTML o CSV, oppure consultare Preflight Reports per il flusso di lavoro completo dei reportL'API complementare

GetPDFUADiagnostics esegue controlli analoghi per PDF/UA (ISO 14289-1) sul documento in memoria attualmente in costruzione, anziché su un file esternoQuando si produce output PDF/A con questa libreria, chiamare

SetPDFAMode prima di aggiungere qualsiasi contenuto. La protezione lato generazione all'interno di SetPDFAMode blocca le operazioni vietate dalla parte scelta, quindi un documento costruito in questo modo supererà normalmente CheckFileCompliance automaticamente

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

Il test di conformità 3 audita PDF/X (ISO 15930): identificazione di edizione, output intent, geometria di pagina, font incorporati e l'insieme di funzionalità vietate; per PDF/X-6 valida anche i flag di annotazioni e le apparenze fisse, le apparenze AcroForm e firma, le esclusioni XFA e di apparenze generate dal viewer, il collocamento delle azioni, le catene di azioni, l'insieme di azioni nominate permesse e ogni valore UseBlackPtComp

Il test di conformità 4 audita i metadati di identificazione PDF/VT-3, la sua base della famiglia PDF/X-6, il grafo DPartRoot e DPart, i nomi e valori DPM, il livello di record, l'ordine di pagine e la copertura esatta delle foglie; i controlli composti condividono una passata di analizzatore

Il test di conformità 5 audita il posizionamento dei marcatori PDF/R-1, la versione e la cifratura, gli oggetti indiretti di generazione zero, i dizionari e i filtri limitati, i programmi di pagina a flusso singolo, le strisce raster ordinate, le codifiche di immagine, la copertura di pagine e la risoluzione effettiva; può riusare una passata di analisi di pipeline di validazione condivisa

Il test di conformità 6 audita il fondamento PDF/X e l'identificazione XMP di PDF/VCR-1, la radice di modello diretta unica, i campi dichiarati, il campo di selezione di pagine opzionale e ogni segnaposto di sostituzione PassThrough di foglia, il binding di pagine, gli MCID e le box delimitatrici; può riusare una passata di analisi di pipeline di validazione condivisa

Il test di conformità 7 audita l'identificazione e i metadati di ciclo di vita PDF/E-1, gli identificatori di trailer, la cifratura permessa, gli output intent e gli spazi colore di dispositivo, gli operatori di contenuto, i font, le annotazioni, i moduli, il contenuto opzionale, le azioni, i riferimenti a file esterni, gli stati grafici e le restrizioni di flussi 3D; può riusare una passata di analisi di pipeline di validazione condivisa