CheckFileCompliance
Zhoda, inšpekcia dokumentov
Popis
Načíta externý súbor PDF a overí ho voči zvolenému štandardu ISO pre zhodu. Vrátená hodnota je buď nula (súbor prejde zvoleným testom bez závad) alebo nenulový handle StringListID, ktorý obsahuje zoznam všetkých zistených problémov. Každá položka zoznamu je krátky kód, dvojbodka a ľudsky čitateľné hlásenie — presne rovnaký formát kódov, aký používa GetPDFUADiagnostics. Výsledok vymenujte pomocou GetStringListCount a GetStringListItemTest PDF/A pokrýva všetkých šesť režimov zhody (PDF/A-1a, PDF/A-1b, PDF/A-2a, PDF/A-2b, PDF/A-3a, PDF/A-3b) a načíta položky XMP
pdfaid:part/pdfaid:conformance, aby rozhodol, ktorú množinu pravidiel aplikujeTest PDF/UA-1 (pridaný vo v3.56.0) skontroluje externý PDF voči ISO 14289-1 a vydáva diagnostické kódy v rozsahu
10xxx, aby zostali vizuálne oddelené od kódov PDF/A 00xxx
Syntax
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);
Parametre
| InputFileName | Úplná cesta k súboru PDF na overenie. Súbor sa otvára len na čítanie a nemení sa |
|---|---|
| Password | Heslo na otvorenie súboru. Pre nešifrované dokumenty zadajte prázdny reťazec. Šifrovaný dokument testom PDF/A zlyhá (kód 00006) bez ohľadu na to, či je zadané správne heslo — PDF/A šifrovanie zakazuje |
| ComplianceTest | Štandard, podľa ktorého sa má kontrolovať 1 — PDF/A (ISO 19005-1/-2/-3, všetkých šesť úrovní zhody) 2 — PDF/UA-1 (ISO 14289-1:2014, prístupné PDF) 3 — PDF/X (ISO 15930, vrátane rodiny PDF/X-6) 4 — PDF/VT-3 (ISO 16612-3:2020 nad základom rodiny PDF/X-6) 5 — PDF/R-1 obmedzená rastrová výmena 6 — PDF/VCR-1 šablóny náhrady variabilného obsahu 7 — PDF/E-1 výmena inžinierskych dokumentov |
| Options | Bitové príznaky upravujúce test 0 — Predvolené: ohlásiť každý nájdený problém v dokumente 1 — Zastaviť po prvom probléme a vrátiť sa okamžite. Užitočné, keď volajúci potrebuje len signál prešlo/neprešlo |
Návratové hodnoty
| 0 | Súbor zodpovedá zvolenému štandardu |
|---|---|
| Non-zero | Handle StringListID, ktorej položky popisujú každú zistenú nezhodu. Handle zostáva platný, kým sa dokument nezavrie alebo nezavolá ReleaseStringList |
Kódy problémov PDF/A (ComplianceTest = 1)
| 00002 | Verzia PDF presahuje maximum povolené úrovňou zhody (PDF/A-1 obmedzuje na 1.4; PDF/A-2 a PDF/A-3 na 1.7). Riadok podrobností uvádza problematickú verziu a povolené maximum |
|---|---|
| 00003 | Katalóg obsahuje /OCProperties (voliteľný obsah / vrstvy), čo PDF/A-1 zakazuje. PDF/A-2 a PDF/A-3 vrstvy pripúšťajú a túto kontrolu nespúšťajú |
| 00005 | Pár XMP pdfaid:part+pdfaid:conformance chýba, je poškodený alebo obsahuje hodnotu mimo legálnej množiny 1A, 1B, 2A, 2B, 3A, 3B. Knižnica nevie určiť, ktorú množinu pravidiel aplikovať, preto sa to hlási ako fatálny problém bez ohľadu na Options |
| 00006 | Dokument je zašifrovaný. PDF/A zakazuje šifrovanie v každej časti |
| 00007 | Katalóg nemá položku /OutputIntents. Všetky časti PDF/A vyžadujú výstupný zámer, aby farebný priestor vykresľovania bol jednoznačne definovaný |
| 00011 | Katalóg nemá položku /MarkInfo. Vyžaduje sa len pre zhodu úrovne a (PDF/A-1a, 2a, 3a) — tagovaný PDF sa musí sám deklarovať |
| 00012 | Katalóg nemá položku /StructTreeRoot. Vyžaduje sa len pre zhodu úrovne a. Tagovaný dokument PDF musí mať strom logickej štruktúry |
Kódy problémov PDF/UA-1 (ComplianceTest = 2)
| 10001 | Tok metadát XMP neobsahuje pdfuaid:part alebo hodnota nie je 1. ISO 14289-1 §5 vyžaduje, aby sa vyhovujúci súbor identifikoval touto vlastnosťou; ISO 14289-1 §6.2 zakazuje oznamovať zhodu bez nej |
|---|---|
| 10002 | Katalóg dokumentu nemá tok /Metadata. Tvrdenie o zhode PDF/UA-1 sa zaznamenáva vnútri tohto toku; bez neho sa súbor nemôže označiť ako prístupný |
| 10003 | Slovník /MarkInfo katalógu chýba alebo /Marked nie je true. ISO 14289-1 §7.1 vyžaduje, aby sa každý vyhovujúci súbor deklaroval ako tagovaný, aby asistívne technológie mohli spoľahnúť na strom štruktúry |
| 10004 | Katalóg nemá položku /StructTreeRoot. Súbor PDF/UA-1 musí obsahovať strom logickej štruktúry popisujúci poradie čítania a sémantiku dokumentu |
| 10005 | Slovník /ViewerPreferences chýba alebo jeho položka /DisplayDocTitle nie je true. ISO 14289-1 §7.1 vyžaduje, aby vyhovujúce čítačky zobrazovali v záhlaví okna názov dokumentu namiesto názvu súboru |
| 10006 | Položka /Lang katalógu chýba alebo je prázdna. ISO 14289-1 §7.2 (s odkazom na ISO 32000-1 §14.9.2) vyžaduje, aby každý vyhovujúci súbor deklaroval svoj prirodzený jazyk, aby si čítačky obrazovky vybrali správny hlas a pravidlá výslovnosti |
| 10007 | Tok metadát XMP nenesie neprázdny dc:title z Dublin Core. ISO 14289-1 §7.1 vyžaduje "položku dc:title, ktorá jasne identifikuje dokument" |
| 10008 | Slovník /MarkInfo má /Suspects nastavené na true. ISO 14289-1 §7.1: súbory tvrdiace zhodu PDF/UA musia mať hodnotu Suspects false — hodnota true označuje tagovanie za známe s chybami |
| 10009 | /RoleMap dokumentu presmapuje jeden alebo viac štandardných typov štruktúry. ISO 14289-1 §7.1: štandardné značky definované v ISO 32000-1 §14.8.4 (P, H1..H6, Figure, Table atď) sa nesmú presmapovať. Riadok podrobností uvádza prvú presmapovanú štandardnú značku |
| 10010 | Súbor je zašifrovaný, ale bit 10 kľúča oprávnení /P šifrovania (maska 512, "Extract for accessibility") nie je nastavený. ISO 14289-1 §7.16 vyžaduje, aby každý zašifrovaný vyhovujúci súbor pripúšťal extrakciu pre prístupnosť, aby asistívne technológie mohli obsah dosiahnuť |
| 10011 | Bol zistený dynamický formulár XFA: paket XFA XDP obsahuje <dynamicRender>required</dynamicRender>. ISO 14289-1 §7.15 zakazuje dynamické formuláre XFA vo vyhovujúcich súboroch; statické XFA je pripustené |
| 10012 | Bol zistený Reference XObject (Form XObject nesúci položku /Ref). ISO 14289-1 §7.20 zakazuje referenčné XObjects, pretože umožňujú vložiť jedno PDF do druhého odkazom bez sprístupnenia odkazovaného obsahu asistívnym technológiám |
| 10013 | Boli zistené jedna alebo viac anotácií TrapNet. ISO 14289-1 §7.18.2 explicitne zakazuje TrapNet vo vyhovujúcich súboroch. Riadok podrobností uvádza, koľko anotácií bolo nájdených |
| 10014 | Jedna alebo viac stránok nesie anotácie, ale nenastavuje /Tabs /S vo svojom slovníku stránky. ISO 14289-1 §7.18.3 vyžaduje, aby poradie tabulátora na takýchto stránkach nasledovalo strom štruktúry, čo signalizuje /Tabs /S. Riadok podrobností uvádza počet problematických stránok |
| 10015 | Jedna alebo viac anotácií Link postráda neprázdny alternatívny popis /Contents. ISO 14289-1 §7.18.5 vyžaduje, aby každá anotácia Link niesla prístupný popis, aby čítačky obrazovky mohli oznámiť cieľ odkazu. Riadok podrobností uvádza počet problematických anotácií Link |
| 10016 | V jednom alebo viacerých slovníkoch FileSpec vložených súborov chýba kľúč názvu súboru /F. ISO 14289-1 §7.11 vyžaduje, aby každý FileSpec vloženého súboru niesol /F aj /UF |
| 10017 | V jednom alebo viacerých slovníkoch FileSpec vložených súborov chýba kľúč Unicode názvu súboru /UF. ISO 14289-1 §7.11 vyžaduje, aby každý FileSpec vloženého súboru niesol /F aj /UF |
| 10018 | V jednom alebo viacerých konfiguračných slovníkoch voliteľného obsahu chýba neprázdny textový reťazec /Name. ISO 14289-1 §7.10 vyžaduje, aby každý konfiguračný slovník OCG (predvolená položka D plus každý slovník v OCProperties/Configs) niesol neprázdne /Name |
| 10019 | Jeden alebo viac konfiguračných slovníkov voliteľného obsahu obsahuje zakázaný kľúč /AS. ISO 14289-1 §7.10 explicitne zakazuje /AS v každom konfiguračnom slovníku OCG, aby sa zabránilo automatickým úpravám stavov riadeným informáciami o používaní |
| 10020 | Jedno alebo viac písiem mimo štandardných 14, na ktoré dokument odkazuje, nevkladá svoj program písma (žiadna položka FontFile, FontFile2 alebo FontFile3 vo FontDescriptor). ISO 14289-1 §7.21.4.1 vyžaduje, aby každé písmo použité na vykresľovanie vložilo svoj program. Písma Type 3 túto kontrolu vynechávajú, pretože ich glyfy sú inline CharProcs |
| 10021 | V jednom alebo viacerých potomkoch CIDFontType2 chýba položka /CIDToGIDMap. ISO 14289-1 §7.21.3.2 vyžaduje, aby každé vložené CIDFont Type 2 nieslo /CIDToGIDMap (buď ako tok mapujúci CID na indexy glyfov, alebo ako názov Identity) |
| 10022 | Jedno alebo viac štandardných písiem 14 (Helvetica, Times, Courier, Symbol, ZapfDingbats a ich varianty tučné / kurzívou) sa odkazuje bez vloženého programu písma. ISO 14289-1 §7.21.4 NOTE 5 jednoznačne uvádza, že pre 14 štandardných písiem Type 1 neexistuje výnimka z vkladania |
| 10023 | V jednom alebo viacerých písmach chýba CMap /ToUnicode a nezodpovedajú zoznamu výnimiek §7.21.7. Zoznam výnimiek pokrýva preddefinované MacRomanEncoding / MacExpertEncoding / WinAnsiEncoding, písma Type 0, ktorých potomok CIDFont používa znakové kolekcie Adobe GB1 / CNS1 / Japan1 / Korea1, a nesymbolické písma TrueType |
| 10024 | Prvý prvok nadpisu v poradí dokumentu nie je H1 (alebo silne štruktúrované H). ISO 14289-1 §7.4.2: "Ak sa používajú nejaké značky nadpisov, prvý má byť H1" |
| 10025 | V poradí dokumentu bolo zistené preskočenie jednej alebo viacerých úrovní nadpisov — napríklad H1 bezprostredne nasleduje H3 a preskočí sa H2. ISO 14289-1 §7.4.2 vyžaduje, aby klesajúce sekvencie nadpisov postupovali v prísnom číselnom poradí bez preskočenia medziľahlých úrovní |
| 10026 | Jedna alebo viac anotácií Widget postráda položku /StructParent. ISO 14289-1 §7.18.4 vyžaduje, aby anotácie Widget boli vnorené do štrukturálnej značky Form; bez /StructParent nemožno widget zo stromu štruktúry vôbec dosiahnuť. Riadok podrobností uvádza počet |
| 10027 | Jedna alebo viac anotácií Widget má položku /StructParent, ale jej hodnota sa cez StructTreeRoot/ParentTree neprevedie na štrukturálny prvok s /S = Form. ISO 14289-1 §7.18.4 vyžaduje, aby bola každá anotácia Widget vnorená do štrukturálnej značky Form. Možné príčiny: položka /ParentTree úplne chýba, ukazuje na prvok, ktorý nie je StructElem (surové celé číslo / slovník MCR), alebo pomenúva značku inú než Form |
| 10028 | Jedno alebo viac nesymbolických písiem TrueType má /Encoding (alebo /BaseEncoding slovníka Encoding), ktoré nie je MacRomanEncoding ani WinAnsiEncoding. ISO 14289-1 §7.21.6 obmedzuje kódovanie nesymbolických písiem TrueType na tieto dva preddefinované názvy |
| 10029 | Jedno alebo viac symbolických písiem TrueType nesie položku /Encoding v slovníku písma. Štvrtý odsek ISO 14289-1 §7.21.6 to zakazuje — kódovanie symbolického TrueType sa musí vyjadrovať výhradne cez tabuľku cmap vloženého programu písma |
| 10030 | Jeden alebo viac štrukturálnych prvkov L (zoznam) postráda atribút ListNumbering. ISO 14289-1 §7.6 vyžaduje, aby každá značka L deklarovala svoj štýl číslovania týmto atribútom. Platné hodnoty sú None, Disc, Circle, Square, Decimal, UpperRoman, LowerRoman, UpperAlpha a LowerAlpha (ISO 32000-1 Table 347) |
| 10031 | Jedna alebo viac anotácií Link nesie slovník akcie URI, ktorého položka /IsMap je true. ISO 14289-1 §7.18.5 zakazuje /IsMap = true pri akcii URI, pokiaľ ekvivalentná funkcionalita nie je poskytnutá inde v obsahu bez kľúča /IsMap. Autori s legitímnym prípadom použitia IsMap si majú túto diagnostiku potlačiť sami |
| 10032 | Jeden alebo viac štrukturálnych prvkov Note postráda položku /ID. ISO 14289-1 §7.9 vyžaduje, aby každá značka Note deklarovala jedinečné /ID, aby krížové odkazy mohli smerovať na stabilný cieľ |
| 10033 | Dva alebo viac štrukturálnych prvkov Note zdieľa tú istú hodnotu /ID. Riadok podrobností uvádza počet zistených duplicitných párov. ISO 14289-1 §7.9 vyžaduje, aby ID prvkov Note boli v dokumente jedinečné |
| 10034 | Jeden alebo viac nesymbolických programov TrueType (FontDescriptor s vymazaným príznakom Symbolic, prítomný tok FontFile2) vkladá tabuľku cmap, ktorej jediná podtabuľka je symbolická položka (3,0) od Microsoftu. Prvý odsek ISO 14289-1 §7.21.6 vyžaduje aspoň jednu nesymbolickú podtabuľku cmap, aby program mohol vykresliť kódové body deklarované svojím /Encoding |
| 10035 | Jedno alebo viac nesymbolických písiem TrueType deklaruje /Encoding s poľom /Differences obsahujúcim názvy glyfov, ktoré nie sú členmi Adobe Glyph List 2.0. .notdef je na bielej listine, lebo špecifikácia ho implicitne pripúšťa. Tretí odsek ISO 14289-1 §7.21.6 vyžaduje, aby každá položka Differences spadala do AGL |
| 10036 | Šírky jedného alebo viacerých jednoduchých písiem TrueType sa od zodpovedajúcich metrík vo vloženom programe písma líšia o viac ako jednu tisícinu em. ISO 14289-1 §7.21.5 vyžaduje, aby pole /Widths súhlasilo s metrikami vložených glyfov |
| 10037 | Šírky jedného alebo viacerých CIDFontType2 sa od zodpovedajúcich metrík vo vloženom programe TrueType líšia o viac ako jednu tisícinu em. ISO 14289-1 §7.21.5 vyžaduje, aby pole /W súhlasilo s metrikami vložených glyfov |
| 10038 | Popisovač písma Type 1 /CharSet vynecháva jeden alebo viac názvov glyfov prítomných vo vloženom programe písma. ISO 14289-1 §7.21.4.2 vyžaduje, aby položka vymenovala každý vložený glyf |
| 10039 | Popisovač písma CID /CIDSet vynecháva jeden alebo viac CID, ktoré sa mapujú na glyfy vo vloženom programe písma. ISO 14289-1 §7.21.4.2 vyžaduje, aby bitová množina identifikovala každý vložený CID |
| 10040 | Form XObject obsahujúci text sa vyvoláva z obsahu stránky mimo označeného obsahu. ISO 14289-1 §7.20 vyžaduje, aby obsah Form XObject bol začlenený do štrukturálnych prvkov |
| 10041 | Jeden alebo viac operandov zobrazujúcich text sa prevedie na glyf .notdef. ISO 14289-1 §7.21.8 zakazuje odkazy na .notdef bez ohľadu na režim vykresľovania textu |
| 10042 | V jednom alebo viacerých slovníkoch údajov mediálneho klipu (identifikovaných /S /MCD, voliteľne /Type /MediaClip) chýba požadovaná položka typu obsahu /CT. ISO 14289-1 §7.18.6 povyšuje tento voliteľný kľúč z ISO 32000-1 Table 274 na povinný |
| 10043 | V jednom alebo viacerých slovníkoch údajov mediálneho klipu chýba požadované pole /Alt (páry jazykový reťazec + alternatívny text). ISO 14289-1 §7.18.6 povyšuje tento voliteľný kľúč z ISO 32000-1 Table 274 na povinný, aby asistívne technológie mohli oznámiť popis vloženého multimédia |
| 10044 | Jeden alebo viac uzlov stromu štruktúry nesie viac ako jedného priameho potomka H (všeobecný nadpis). ISO 14289-1 §7.4.4 to explicitne zakazuje — rozdeľte sekciu alebo nahraďte značky H číslovanými úrovňami H1..H6 |
Poznámky
Test PDF/A je určený ako rýchla vlastná kontrola pred dodaním. Zachytí problémy na úrovni dokumentu, ktoré súbor priamo diskvalifikujú (nesprávna verzia PDF, chýbajúci OutputIntent, chýbajúci strom štruktúry na úrovni A, šifrovanie, vrstvy v PDF/A-1). Neprechádza cez každý operátor obsahového toku ani neoveruje vkladanie písiem alebo odkazy na farebné priestory pre každý vykreslený objekt — také validácie vyžadujú špecializovaný validátor PDF/A (napríklad veraPDF). Túto funkciu používajte ako kontrolu prvej línie a ako regresnú bránu v zostavovacích linkách. Ak chcete, aby knižnica naformátovala zoznamy problémov do opakovane použiteľného textového hlásenia, použite CreatePreflightReport alebo SavePreflightReport. Pre výstup hlásení do textu, JSON, HTML alebo CSV použite CreatePreflightReportEx alebo SavePreflightReportEx, prípadne pozrite Preflight Reports pre kompletný pracovný postup hláseníSúrodé API
GetPDFUADiagnostics vykonáva obdobné kontroly PDF/UA-1 (ISO 14289-1) nad práve zostavovaným dokumentom v pamäti namiesto nad externým súboromAk s touto knižnicou vytvárate výstup PDF/A, zavolajte
SetPDFAMode pred pridaním akéhokoľvek obsahu. Ochrana na strane generovania vnútri SetPDFAMode blokuje operácie zakázané zvolenou časťou, takže takto zostavený dokument zvyčajne prejde CheckFileCompliance automaticky
Príklad
// 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;Pozri tiež
Preflight Reports, CreatePreflightReport, CreatePreflightReportEx, SavePreflightReport, SavePreflightReportEx, ComparePreflightReports, SetPDFAMode, GetPDFUADiagnostics, GetStringListCount, GetStringListItem, SetPDFUAMode
Test zhody 3 kontroluje PDF/X (ISO 15930): identifikáciu vydania, výstupný zámer, geometriu stránok, vložené písma a množinu zakázaných funkcií; pri PDF/X-6 navyše overí príznaky anotácií a pevné podoby, podoby AcroForm a podpisov, vylúčenia XFA a podôb generovaných prehliadačom, umiestnenie akcií, reťazce akcií, povolenú množinu pomenovaných akcií a každú hodnotu UseBlackPtCompTest zhody 4 kontroluje metaúdaje identifikácie PDF/VT-3, jeho základ rodiny PDF/X-6, graf DPartRoot a DPart, názvy a hodnoty DPM, úroveň záznamov, poradie stránok a presné pokrytie listov; zložené kontroly zdieľajú jeden priebeh syntaktickej analýzyTest zhody 5 kontroluje umiestnenie značky PDF/R-1, verziu a šifrovanie, nepriame objekty generácie nula, obmedzené slovníky a filtre, stránkové programy s jedným tokom, usporiadané rastrové pásma, kódovania obrázkov, pokrytie stránok a efektívne rozlíšenie; môže znova použiť priebeh zdieľanej validačnej linkyTest zhody 6 kontroluje základ PDF/X a identifikáciu XMP PDF/VCR-1, jediný priamy koreň šablóny, deklarované polia, voliteľné pole výberu stránok a každý listový zástupný prvok náhrady PassThrough, väzbu na stránku, MCID a ohraničujúci obdĺžnik; môže znova použiť priebeh zdieľanej validačnej linkyTest zhody 7 kontroluje identifikáciu a metaúdaje životného cyklu PDF/E-1, identifikátory traileru, pripustené šifrovanie, výstupné zámery a farebné priestory zariadení, operátory obsahu, písma, anotácie, formuláre, voliteľný obsah, akcie, odkazy na externé súbory, grafické stavy a obmedzenia tokov 3D; môže znova použiť priebeh zdieľanej validačnej linky