CheckFileComplianceA
Compliance, Document inspection
Popis
Koncové A označuje vstupní bod ANSI (char) knihovny DLL; rozhraní ActiveX/COM zpřístupňuje pouze formu Unicode. Chování je shodné s CheckFileCompliance a řetězcové argumenty jsou interpretovány pomocí aktuální znakové stránky nastavené funkcí SetAnsiMode
Reads an external PDF file and validates it against a chosen ISO compliance standard. The returned value is either zero (file passes the chosen test cleanly) or a non-zero StringListID handle that lists every issue detected. Each entry in the list is a short code, a colon, and a human-readable message — exactly the same code format used by GetPDFUADiagnostics. Enumerate the result with GetStringListCount and GetStringListItem.
Test PDF/A pokrývá všech šest režimů shody (PDF/A-1a, PDF/A-1b, PDF/A-2a, PDF/A-2b, PDF/A-3a, PDF/A-3b) a přečte položky XMP pdfaid:part/pdfaid:conformance, aby rozhodl, která sada pravidel se použije
Test PDF/UA-1 (přidaný ve v3.56.0) kontroluje externí PDF proti ISO 14289-1 a vypisuje diagnostické kódy v rozsahu 10xxx, takže zůstávají vizuálně oddělené od kódů PDF/A 00xxx
Syntaxe
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);
Parametry
| InputFileName | Úplná cesta k validovanému PDF souboru. Soubor se otevírá jen pro čtení a nemodifikuje se |
|---|---|
| Password | Password used to open the file. Pass an empty string for unencrypted documents. Note that an encrypted document fails the PDF/A test (code 00006) regardless of whether the correct password is supplied — PDF/A forbids encryption. |
| ComplianceTest | The standard to check against. 1 — PDF/A (ISO 19005-1/-2/-3, all six conformance levels). 2 — PDF/UA-1 (ISO 14289-1:2014, accessible PDF). |
| Options | Bit flags that modify the test. 0 — Default: report every issue found in the document. 1 — Stop after the first issue and return immediately. Useful when the caller only needs a pass/fail signal. |
Return values
| 0 | Soubor odpovídá zvolenému standardu |
|---|---|
| Non-zero | StringListID je handle, jehož položky popisují každou zjištěnou neshodu. Handle zůstává platný, dokud se dokument nezavře nebo není zavolána funkce ReleaseStringList |
PDF/A issue codes (ComplianceTest = 1)
| 00002 | Verze PDF překračuje maximum dovolené úrovní shody (PDF/A-1 strop na 1.4; PDF/A-2 a PDF/A-3 strop na 1.7). Detailní řádek pojmenuje problematickou verzi a dovolené maximum |
|---|---|
| 00003 | Katalog obsahuje /OCProperties (volitelný obsah / vrstvy), což PDF/A-1 zakazuje. PDF/A-2 a PDF/A-3 vrstvy dovolují a tuto kontrolu nespouštějí |
| 00005 | Pár XMP pdfaid:part+pdfaid:conformance chybí, je poškozený, nebo obsahuje hodnotu mimo legální množinu 1A, 1B, 2A, 2B, 3A, 3B. Knihovna nedokáže určit, která sada pravidel se použije, takže se to hlásí jako fatální problém bez ohledu na Options |
| 00006 | Dokument je šifrovaný. PDF/A zakazuje šifrování v každé části |
| 00007 | Katalog nemá položku /OutputIntents. Všechny části PDF/A vyžadují output intent, aby byl vykreslovací barevný prostor jednoznačně definovaný |
| 00011 | The Catalog has no /MarkInfo entry. Required only for a-level conformance (PDF/A-1a, 2a, 3a) — tagged PDF must declare itself. |
| 00012 | Katalog nemá položku /StructTreeRoot. Vyžadováno jen pro shodu úrovně a. Tagované PDF musí mít logický strukturní strom |
PDF/UA-1 issue codes (ComplianceTest = 2)
| 10001 | Proud metadat XMP neobsahuje pdfuaid:part, nebo hodnota není 1. ISO 14289-1 §5 vyžaduje, aby se korektní soubor identifikoval touto vlastností; ISO 14289-1 §6.2 zakazuje hlásit shodu bez ní |
|---|---|
| 10002 | Katalog dokumentu nemá proud /Metadata. Nárok na shodu PDF/UA-1 se zapisuje uvnitř tohoto proudu; bez něj se soubor nemůže ohlásit jako přístupný |
| 10003 | Slovník /MarkInfo v katalogu chybí, nebo /Marked není true. ISO 14289-1 §7.1 vyžaduje, aby se každý korektní soubor deklaroval jako tagovaný, aby asistivní technologie mohly spoléhat na strukturní strom |
| 10004 | Katalog nemá položku /StructTreeRoot. Soubor PDF/UA-1 musí obsahovat logický strukturní strom popisující čtecí pořadí a sémantiku dokumentu |
| 10005 | Slovník /ViewerPreferences chybí, nebo jeho položka /DisplayDocTitle není true. ISO 14289-1 §7.1 vyžaduje, aby korektní čtečky zobrazovaly název dokumentu v okně místo názvu souboru |
| 10006 | Položka /Lang v katalogu chybí nebo je prázdná. ISO 14289-1 §7.2 (s odkazem na ISO 32000-1 §14.9.2) vyžaduje, aby každý korektní soubor deklaroval svůj přirozený jazyk, aby screen readery zvolily správný hlas a pravidla výslovnosti |
| 10007 | Proud metadat XMP nenese neprázdný Dublin Core dc:title. ISO 14289-1 §7.1 vyžaduje "dc:title položku, která dokument jednoznačně identifikuje" |
| 10008 | The /MarkInfo dictionary has /Suspects set to true. ISO 14289-1 §7.1: files claiming PDF/UA conformance must have a Suspects value of false — a true value marks the tagging as known to contain errors. |
| 10009 | Slovník /RoleMap dokumentu přemapovává jeden nebo více standardních strukturních typů. ISO 14289-1 §7.1: standardní tagy definované v ISO 32000-1 §14.8.4 (P, H1..H6, Figure, Table apod.) se přemapovávat nesmějí. Detailní řádek pojmenuje první přemapovaný standardní tag |
| 10010 | Soubor je šifrovaný, ale bit 10 klíče oprávnění šifrování /P (maska 512, "Extract for accessibility") není nastaven. ISO 14289-1 §7.16 vyžaduje, aby každý šifrovaný korektní soubor dovolil extrakci pro přístupnost, aby asistivní technologie obsah dosáhly |
| 10011 | Byl zjištěn dynamický XFA formulář: XFA XDP balíček obsahuje <dynamicRender>required</dynamicRender>. ISO 14289-1 §7.15 zakazuje dynamické XFA formuláře ve vyhovujících souborech; statické XFA je povoleno |
| 10012 | Byl zjištěn referenční XObject (Form XObject nesoucí položku /Ref). Norma ISO 14289-1 §7.20 referenční XObjects zakazuje, protože umožňují, aby jeden PDF dokument vložil jiný pomocí odkazu, aniž by asistivní technologie získala přístup k odkazovanému obsahu |
| 10013 | Byla zjištěna jedna nebo více anotací TrapNet. ISO 14289-1 §7.18.2 explicitně zakazuje TrapNet ve vyhovujících souborech. Detailní řádek hlásí, kolik anotací se našlo |
| 10014 | Jedna nebo více stránek nese anotace, ale nenastavuje /Tabs /S ve svém slovníku stránky. ISO 14289-1 §7.18.3 vyžaduje, aby pořadí tabulátorů na takových stránkách následovalo strukturní strom, což signalizuje /Tabs /S. Detailní řádek hlásí počet problematických stránek |
| 10015 | Jedna nebo více odkazových anotací postrádá neprázdný náhradní popis /Contents. ISO 14289-1 §7.18.5 vyžaduje, aby každá odkazová anotace nesla přístupný popis, aby screen readery uměly oznámit cíl odkazu. Detailní řádek hlásí počet problematických odkazových anotací |
| 10016 | Jeden nebo více slovníků FileSpec vložených souborů postrádá klíč názvu souboru /F. ISO 14289-1 §7.11 vyžaduje, aby každý FileSpec vloženého souboru nesl /F i /UF |
| 10017 | Jeden nebo více slovníků FileSpec vložených souborů nemá klíč názvu souboru Unicode /UF. ISO 14289-1 §7.11 vyžaduje, aby každý FileSpec vloženého souboru obsahoval /F i /UF |
| 10018 | Jeden nebo více slovníků konfigurace volitelného obsahu postrádá neprázdný textový řetězec /Name. ISO 14289-1 §7.10 vyžaduje, aby každý konfigurační slovník OCG (výchozí položka D plus každý slovník v OCProperties/Configs) nesl neprázdné /Name |
| 10019 | Jeden nebo více slovníků konfigurace volitelného obsahu obsahuje zakázaný klíč /AS. ISO 14289-1 §7.10 explicitně zakazuje /AS v jakémkoli konfiguračním slovníku OCG, aby se zabránilo automatickým úpravám stavu řízeným informacemi o používání |
| 10020 | Jeden nebo více fontů mimo Standard 14 odkazovaných dokumentem nevkládá svůj fontový program (žádná položka FontFile, FontFile2 ani FontFile3 na FontDescriptor). ISO 14289-1 §7.21.4.1 vyžaduje, aby každý font použitý pro vykreslování vložil svůj program. Fonty Type 3 tuto kontrolu vynechávají, protože jejich glyfy jsou inline CharProcs |
| 10021 | Jeden nebo více potomků CIDFontType2 postrádá položku /CIDToGIDMap. ISO 14289-1 §7.21.3.2 vyžaduje, aby každý vložený CIDFont Type 2 nesl /CIDToGIDMap (jako proud mapující CIDs na glyfové indexy, nebo jako název Identity) |
| 10022 | Jeden nebo více standardních fontů 14 (Helvetica, Times, Courier, Symbol, ZapfDingbats a jejich varianty bold/oblique) je odkazováno bez vloženého fontového programu. ISO 14289-1 §7.21.4 POZNÁMKA 5 jasně říká, že pro 14 standardních fontů Type 1 žádná výjimka z vkládání neexistuje |
| 10023 | Jeden nebo více fontů postrádá CMap /ToUnicode a neodpovídá seznamu výjimek §7.21.7. Seznam výjimek pokrývá předdefinované MacRomanEncoding / MacExpertEncoding / WinAnsiEncoding, fonty Type 0, jejichž potomek CIDFont používá znakové kolekce Adobe GB1 / CNS1 / Japan1 / Korea1, a nesymbolické TrueType fonty |
| 10024 | První element záhlaví v pořadí dokumentu není H1 (ani silně strukturní H). ISO 14289-1 §7.4.2: "Pokud se používají tagy záhlaví, H1 musí být první" |
| 10025 | One or more heading-level skips were detected in document order — e.g. an H1 immediately followed by an H3, skipping H2. ISO 14289-1 §7.4.2 requires descending heading sequences to proceed in strict numerical order without skipping intervening levels. |
| 10026 | Jedna nebo více anotací Widget postrádá položku /StructParent. ISO 14289-1 §7.18.4 vyžaduje, aby anotace Widget byly vnořené do strukturního tagu Form; bez /StructParent se Widget nemůže ze strukturního stromu vůbec dostat. Detailní řádek hlásí počet |
| 10027 | Jedna nebo více anotací Widget obsahuje položku /StructParent, ale její hodnota nevede přes StructTreeRoot/ParentTree ke strukturálnímu prvku s /S = Form. ISO 14289-1 §7.18.4 vyžaduje, aby každá anotace Widget byla vnořena do značky struktury Form. Možné příčiny: položka /ParentTree zcela chybí, odkazuje na prvek jiný než StructElem (surové celé číslo / MCR slovník) nebo označuje značku jinou než Form |
| 10028 | One or more non-symbolic TrueType fonts have /Encoding (or an Encoding dictionary's /BaseEncoding) that is not MacRomanEncoding or WinAnsiEncoding. ISO 14289-1 §7.21.6 restricts non-symbolic TrueType encoding to these two predefined names. |
| 10029 | Jedno nebo více symbolických písem TrueType obsahuje ve slovníku písem položku /Encoding. Čtvrtý odstavec normy ISO 14289-1 §7.21.6 to zakazuje — kódování symbolického písma TrueType musí být vyjádřeno pouze tabulkou cmap vloženého programu písma's |
| 10030 | Jeden nebo více strukturních elementů L (seznam) postrádá atribut ListNumbering. ISO 14289-1 §7.6 vyžaduje, aby každý tag L deklaroval svůj styl číslování přes tento atribut. Platné hodnoty jsou None, Disc, Circle, Square, Decimal, UpperRoman, LowerRoman, UpperAlpha a LowerAlpha (ISO 32000-1, Tabulka 347) |
| 10031 | Jedna nebo více odkazových anotací nese slovník akce URI, jehož položka /IsMap je true. ISO 14289-1 §7.18.5 zakazuje /IsMap = true u akce URI, pokud ekvivalentní funkce není poskytnuta jinde v obsahu bez klíče /IsMap. Autoři s legitimním použitím IsMap si tento diagnostický nález mají potlačit sami |
| 10032 | Jeden nebo více strukturních elementů Note postrádá položku /ID. ISO 14289-1 §7.9 vyžaduje, aby každý tag Note deklaroval unikátní /ID, aby cross-reference mířily na stabilní cíl |
| 10033 | Dva a více elementů Note sdílejí tutéž hodnotu /ID. Detailní řádek hlásí počet zjištěných duplicitních párů. ISO 14289-1 §7.9 vyžaduje, aby ID Note byly v dokumentu unikátní |
| 10034 | Jeden nebo více nesymbolických TrueType programů (FontDescriptor s vypnutým příznakem Symbolic, přítomný proud FontFile2) vkládá tabulku cmap, jejíž jediná podtabulka je symbolická položka Microsoft (3,0). ISO 14289-1 §7.21.6 první odstavec vyžaduje aspoň jednu nesymbolickou podtabulku cmap, aby program dokázal vykreslit body kódu deklarované svým /Encoding |
| 10035 | Jedno nebo více nesymbolických písem TrueType deklaruje /Encoding s polem /Differences, které obsahuje názvy glyfů nepatřící do seznamu Adobe Glyph List 2.0. .notdef je povolen jako výjimka, protože specifikace jej implicitně připouští. Třetí odstavec normy ISO 14289-1 §7.21.6 vyžaduje, aby každá položka Differences odkazovala do AGL |
| 10042 | Jeden nebo více slovníků media clip data (rozpoznaných podle /S /MCD, volitelně /Type /MediaClip) postrádá povinnou položku typu obsahu /CT. ISO 14289-1 §7.18.6 povyšuje tuto volitelnou položku z ISO 32000-1, Tabulka 274, na povinnou |
| 10043 | Jeden nebo více slovníků media clip data postrádá povinné pole /Alt (páry jazykový řetězec + náhradní text). ISO 14289-1 §7.18.6 povyšuje tuto volitelnou položku z ISO 32000-1, Tabulka 274, na povinnou, aby asistivní technologie uměla oznámit popis vloženého multimédia |
| 10044 | One or more structure tree nodes carry more than one direct H (generic heading) child. ISO 14289-1 §7.4.4 explicitly forbids this — split the section, or replace the H tags with numbered H1..H6 levels. |
Poznámky
The PDF/A test is intended as a fast self-check before delivery. It catches the document-level issues that disqualify a file outright (wrong PDF version, missing OutputIntent, missing structure tree at the A level, encryption, layers in PDF/A-1). It does not walk every content-stream operator nor verify font embedding or color-space references for each painted object — those validations require a dedicated PDF/A validator (such as veraPDF). Use this function as a first-line check and as a regression gate in build pipelines. Use CreatePreflightReport or SavePreflightReport when you want the library to format the issue lists into a reusable text report. Use CreatePreflightReportEx or SavePreflightReportEx for text, JSON, HTML, or CSV report output, or see Preflight Reports for the complete report workflow.
Doprovodné API GetPDFUADiagnostics provádí analogické kontroly pro PDF/UA-1 (ISO 14289-1) nad dokumentem v paměti, který se právě staví, místo nad externím souborem
Když s touto knihovnou vyrábíte výstup PDF/A, zavolejte SetPDFAMode před přidáním jakéhokoli obsahu. Guard na straně generování uvnitř SetPDFAMode zablokuje operace zakázané zvolenou částí, takže dokument postavený tímto způsobem obvykle projde CheckFileCompliance automaticky
Pří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;Viz také
Preflight Reports, CreatePreflightReport, CreatePreflightReportEx, SavePreflightReport, SavePreflightReportEx, ComparePreflightReports, SetPDFAMode, GetPDFUADiagnostics, GetStringListCount, GetStringListItem, SetPDFUAMode