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
PasswordHeslo 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
OptionsBitové 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

0Súbor zodpovedá zvolenému štandardu
Non-zeroHandle 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)

00002Verzia 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
00003Kataló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ú
00005Pá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
00006Dokument je zašifrovaný. PDF/A zakazuje šifrovanie v každej časti
00007Kataló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ý
00011Kataló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ť
00012Kataló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)

10001Tok 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
10002Kataló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ý
10003Slovní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
10004Katalóg nemá položku /StructTreeRoot. Súbor PDF/UA-1 musí obsahovať strom logickej štruktúry popisujúci poradie čítania a sémantiku dokumentu
10005Slovní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
10006Polož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
10007Tok 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"
10008Slovník /MarkInfo/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
10010Sú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ť
10011Bol 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é
10012Bol 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
10013Boli 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
10014Jedna 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
10015Jedna 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
10016V 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
10017V 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
10018V 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
10019Jeden 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í
10020Jedno 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
10021V 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)
10022Jedno 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
10023V 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
10024Prvý 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"
10025V 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í
10026Jedna 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
10027Jedna 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
10028Jedno 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
10029Jedno 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
10030Jeden 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)
10031Jedna 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
10032Jeden 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ľ
10033Dva 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é
10034Jeden 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
10035Jedno 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
10038Popisovač 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
10039Popisovač 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
10040Form 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
10041Jeden 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
10042V 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ý
10043V 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
10044Jeden 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