CheckFileComplianceA
Efterlevnad, dokumentinspektion
Beskrivning
Det avslutande A:et betecknar ANSI (char)-DLL-ingångspunkten; ActiveX/COM-ytan exponerar bara Unicode-formen. Beteendet är identiskt med CheckFileCompliance och strängargument tolkas med aktuell SetAnsiMode-kod sida
Läser en extern PDF-fil och validerar den mot en vald ISO-efterlevnadsstandard. Returvärdet är antingen noll (filen klarar det valda testet rent) eller ett icke-noll StringListID-handle som listar alla upptäckta problem. Varje post i listan är en kort kod, ett kolon och ett läsbar meddelande – exakt samma kodformat som används av GetPDFUADiagnostics. Iterera resultatet med GetStringListCount och GetStringListItem.
PDF/A-testet täcker alla sex conformance-lägen (PDF/A-1a, PDF/A-1b, PDF/A-2a, PDF/A-2b, PDF/A-3a, PDF/A-3b) och läser pdfaid:part/pdfaid:conformance-XMP-posterna för att avgöra vilken regelmängd som ska tillämpas
PDF/UA-1-testet (tillagt i v3.56.0) kontrollerar en extern PDF mot ISO 14289-1 och genererar diagnostikkoder i 10xxx-intervallet så att de förblir visuellt separata från PDF/A:s 00xxx-koder
Syntax
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);
Parametrar
| InputFileName | Fullständig sökväg till PDF-filen som ska valideras. Filen öppnas skrivskyddat och ändras inte |
|---|---|
| Password | Lösenord som används för att öppna filen. Ange en tom sträng för okrypterade dokument. Observera att ett krypterat dokument underkänner PDF/A-testet (kod 00006) oavsett om rätt lösenord lämnas — PDF/A förbjuder kryptering |
| ComplianceTest | Standarden som kontrollen avser. 1 — PDF/A (ISO 19005-1/-2/-3, alla sex konformitetsnivåer). 2 — PDF/UA-1 (ISO 14289-1:2014, tillgänglig PDF). |
| Options | Bitflaggor som ändrar testet 0 — Standard: rapportera varje problem som hittas i dokumentet 1 — Stanna efter det första problemet och returnera omedelbart. Användbart när anroparen bara behöver en pass/fail-signal |
Returvärden
| 0 | Filen är konform med den valda standarden |
|---|---|
| Non-zero | Ett StringListID-handle vars poster beskriver varje upptäckt icke-konformitet. Handle:t förblir giltigt tills dokumentet stängs eller ReleaseStringList anropas |
PDF/A issue codes (ComplianceTest = 1)
| 00002 | PDF-versionen överstiger maximum för conformance-nivån (PDF/A-1 tak 1.4; PDF/A-2 och PDF/A-3 tak 1.7). Detaljraden namnger den förseende versionen och tillåtet maximum |
|---|---|
| 00003 | Catalog:en innehåller /OCProperties (optional content / lager), som PDF/A-1 förbjuder. PDF/A-2 och PDF/A-3 tillåter lager och utlöser inte denna kontroll |
| 00005 | XMP-paret pdfaid:part+pdfaid:conformance saknas, är felformat eller innehåller ett värde utanför den juridiska mängden 1A, 1B, 2A, 2B, 3A, 3B. Biblioteket kan inte avgöra vilken regelmängd som ska tillämpas, så detta rapporteras som ett fatalt problem oavsett Options |
| 00006 | Dokumentet är krypterat. PDF/A förbjuder kryptering i varje del |
| 00007 | Catalog:en saknar /OutputIntents-post. Alla PDF/A-delar kräver en output intent så att renderingsfärgrymden är entydigt definierad |
| 00011 | Catalog:en saknar /MarkInfo-post. Krävs bara för conformance på a-nivå (PDF/A-1a, 2a, 3a) — taggad PDF måste deklarera sig självt |
| 00012 | Catalog:en saknar /StructTreeRoot-post. Krävs bara för conformance på a-nivå. Ett taggat-PDF-dokument måste ha ett logiskt strukturträd |
PDF/UA-1 issue codes (ComplianceTest = 2)
| 10001 | XMP-metadataströmmen innehåller inte pdfuaid:part, eller värdet är inte 1. ISO 14289-1 §5 kräver att en konform fil identifierar sig via denna egenskap; ISO 14289-1 §6.2 förbjuder att rapportera conformance utan den |
|---|---|
| 10002 | Dokumentets Catalog saknar /Metadata-ström. Ett PDF/UA-1-conformance-anspråk spelas in inne i denna ström; utan den kan filen inte annonsera sig som tillgänglig |
| 10003 | Catalog:ens /MarkInfo-dictionary saknas eller är /Marked inte true. ISO 14289-1 §7.1 kräver att varje konform fil deklarerar sig som taggad så att hjälpmedelsteknik kan lita på strukturträdet |
| 10004 | Catalog:en saknar /StructTreeRoot-post. En PDF/UA-1-fil måste innehålla ett logiskt strukturträd som beskriver dokumentets läsordning och semantik |
| 10005 | /ViewerPreferences-dictionaryn saknas eller är dess /DisplayDocTitle-post inte true. ISO 14289-1 §7.1 kräver att konforma läsare visar dokumenttiteln i sin fönsterram i stället för filnamnet |
| 10006 | Catalog:ens /Lang-post saknas eller är tom. ISO 14289-1 §7.2 (med hänvisning till ISO 32000-1 §14.9.2) kräver att varje konform fil deklarerar sitt naturliga språk så att skärmläsare väljer rätt röst och uttalsregler |
| 10007 | XMP-metadataströmmen bär inte en icke-tom Dublin Core dc:title. ISO 14289-1 §7.1 kräver "a dc:title entry which clearly identifies the document" |
| 10008 | /MarkInfo-dictionaryn har /Suspects satt till true. ISO 14289-1 §7.1: filer som gör anspråk på PDF/UA-conformance måste ha ett Suspects-värde på false — ett true-värde markerar taggningen som känd för att innehålla fel |
| 10009 | Dokumentets /RoleMap mappar om en eller flera standardstrukturtyper. ISO 14289-1 §7.1: standardtaggar som definieras i ISO 32000-1 §14.8.4 (P, H1..H6, Figure, Table osv.) får inte mappas om. Detaljraden namnger den första standardtagg som mappades om. |
| 10010 | Filen är krypterad, men bit 10 av krypteringens /P-behörighetsnyckel (mask 512, "Extract for accessibility") är inte satt. ISO 14289-1 §7.16 kräver att varje krypterad konform fil tillåter tillgänglighetsextraktion så att hjälpmedelsteknik når innehållet |
| 10011 | En dynamisk XFA-formulär upptäcktes: XFA-XDP-paketet innehåller <dynamicRender>required</dynamicRender>. ISO 14289-1 §7.15 förbjuder dynamiska XFA-formulär i standardföljande filer; statisk XFA är tillåten. |
| 10012 | En Reference XObject (Form XObject som bär en /Ref-post) upptäcktes. ISO 14289-1 §7.20 förbjuder reference XObjects eftersom de låter en PDF bädda in en annan via referens utan att exponera det refererade innehållet för hjälpmedelsteknik |
| 10013 | Ett eller flera TrapNet-annoteringar upptäcktes. ISO 14289-1 §7.18.2 förbjuder uttryckligen TrapNet i konforma filer. Detaljraden rapporterar hur många annoteringar som hittades |
| 10014 | Ett eller flera sidor bär annoteringar men sätter inte /Tabs /S i sin sid-dictionary. ISO 14289-1 §7.18.3 kräver att tabbordningen på sådana sidor följer strukturträdet, vilket signaleras via /Tabs /S. Detaljraden rapporterar antalet förseende sidor |
| 10015 | Ett eller flera Link-annoteringar saknar en icke-tom /Contents alternativ beskrivning. ISO 14289-1 §7.18.5 kräver att varje Link-annotering bär en tillgänglig beskrivning så att skärmläsare kan annonsera länkmålet. Detaljraden rapporterar antalet förseende Link-annoteringar |
| 10016 | Ett eller flera inbäddade fil-FileSpec-dictionarys saknar nyckeln /F (filnamn). ISO 14289-1 §7.11 kräver att varje inbäddad fil-FileSpec bär både /F och /UF |
| 10017 | Ett eller flera inbäddade fil-FileSpec-dictionarys saknar nyckeln /UF (Unicode-filnamn). ISO 14289-1 §7.11 kräver att varje inbäddad fil-FileSpec bär både /F och /UF |
| 10018 | Ett eller flera optional content-konfigurationsdictionarys saknar en icke-tom /Name-textsträng. ISO 14289-1 §7.10 kräver att varje OCG-konfigurationsdictionary (standardposten D plus varje dictionary i OCProperties/Configs) bär en icke-tom /Name |
| 10019 | Ett eller flera optional content-konfigurationsdictionarys innehåller den förbjudna /AS-nyckeln. ISO 14289-1 §7.10 förbjuder uttryckligen /AS i varje OCG-konfigurationsdictionary för att hindra automatiska tillståndsjusteringar drivna av användningsinformation |
| 10020 | Ett eller flera icke-Standard-14-typsnitt som dokumentet refererar bäddar inte in sitt typsnittsprogram (ingen FontFile-, FontFile2- eller FontFile3-post på FontDescriptor). ISO 14289-1 §7.21.4.1 kräver att varje typsnitt som används för rendering bäddar in sitt program. Type 3-typsnitt hoppar över denna kontroll eftersom deras glyfer är inline-CharProcs |
| 10021 | Ett eller flera CIDFontType2-ättlingar saknar /CIDToGIDMap-posten. ISO 14289-1 §7.21.3.2 kräver att varje inbäddad Type 2 CIDFont bär /CIDToGIDMap (antingen som en ström som mappar CIDs till glyfindex, eller som namnet Identity) |
| 10022 | En eller flera av Standard 14-teckensnitten (Helvetica, Times, Courier, Symbol, ZapfDingbats och deras feta / kursiva varianter) refereras utan inbäddat typsnittsprogram. ISO 14289-1 §7.21.4 NOTE 5 gör klart att de 14 standardtypsnitten i Type 1 inte är undantagna från inbäddning. |
| 10023 | Ett eller flera typsnitt saknar en /ToUnicode-CMap och matchar inte undantagslistan i §7.21.7. Undantagslistan täcker de fördefinierade MacRomanEncoding / MacExpertEncoding / WinAnsiEncoding, Type 0-typsnitt vars ättling-CIDFont använder Adobe-teckensamlingarna GB1 / CNS1 / Japan1 / Korea1, samt icke-symboliska TrueType-typsnitt |
| 10024 | Det första rubrikelementet i dokumentordning är inte H1 (eller den starkt strukturerade H). ISO 14289-1 §7.4.2: "If any heading tags are used, H1 shall be the first." |
| 10025 | Ett eller flera rubriknivåhopp upptäcktes i dokumentordning — t.ex. ett H1 omedelbart följt av ett H3, vilket hoppar över H2. ISO 14289-1 §7.4.2 kräver att fallande rubriksekvenser löper i strikt numerisk ordning utan att hoppa över mellanliggande nivåer |
| 10026 | Ett eller flera Widget-annoteringar saknar en /StructParent-post. ISO 14289-1 §7.18.4 kräver att Widget-annoteringar nästlas inuti en Form-strukturtagg; utan /StructParent kan Widgeten överhuvudtaget inte nås från strukturträdet. Detaljraden rapporterar antalet |
| 10027 | Ett eller flera Widget-annoteringar har en /StructParent-post men värdet löser inte genom StructTreeRoot/ParentTree till ett strukturelement med /S = Form. ISO 14289-1 §7.18.4 kräver att varje Widget-annotering nästlas inuti en Form-strukturtagg. Möjliga orsaker: /ParentTree-posten saknas helt, pekar på en icke-StructElem (råt heltal / MCR-dictionary), eller namnger en icke-Form-tagg |
| 10028 | Ett eller flera icke-symboliska TrueType-typsnitt har /Encoding (eller en Encoding-dictionarys /BaseEncoding) som inte är MacRomanEncoding eller WinAnsiEncoding. ISO 14289-1 §7.21.6 begränsar icke-symbolisk TrueType-kodning till dessa två fördefinierade namn |
| 10029 | Ett eller flera symboliska TrueType-typsnitt bär en /Encoding-post i typsnittsdictionaryn. ISO 14289-1 §7.21.6 fjärde stycket förbjuder det — symbolisk TrueType-kodning måste uttryckas enbart genom det inbäddade typsnittsprogrammets cmap-tabell |
| 10030 | Ett eller flera L-(lista)-strukturelement saknar attributet ListNumbering. ISO 14289-1 §7.6 kräver att varje L-tagg deklarerar sin numreringsstil via detta attribut. Giltiga värden är None, Disc, Circle, Square, Decimal, UpperRoman, LowerRoman, UpperAlpha och LowerAlpha (ISO 32000-1 tabell 347) |
| 10031 | Ett eller flera Link-annoteringar bär en URI-åtgärdsdictionary vars /IsMap-post är true. ISO 14289-1 §7.18.5 förbjuder /IsMap = true på en URI-åtgärd om inte motsvarande funktionalitet tillhandahålls någon annanstans i innehållet utan en /IsMap-nyckel. Författare med ett legitimt IsMap-användningsfall bör undertrycka denna diagnos på egen hand |
| 10032 | Ett eller flera Note-strukturelement saknar /ID-posten. ISO 14289-1 §7.9 kräver att varje Note-tagg deklarerar ett unikt /ID så att korsreferenser kan landa på ett stabilt mål |
| 10033 | Två eller flera Note-strukturelement delar samma /ID-värde. Detaljraden rapporterar antalet upptäckta dubblettpar. ISO 14289-1 §7.9 kräver att Note-ID:n är unika inom dokumentet |
| 10034 | Ett eller flera icke-symboliska TrueType-program (FontDescriptor med Symbolic-flaggan rensad, FontFile2-ström närvarande) bäddar in en cmap-tabell vars enda subtabell är den symboliska (3,0)-Microsoft-posten. ISO 14289-1 §7.21.6 första stycket kräver minst en icke-symbolisk cmap-subtabell så att programmet kan rendera de kodpunkter dess /Encoding deklarerar |
| 10035 | Ett eller flera icke-symboliska TrueType-typsnitt deklarerar en /Encoding med en /Differences-array som innehåller glyfnamn som inte är medlemmar i Adobe Glyph List 2.0. .notdef är vitlistat eftersom specen underförstått tillåter det. ISO 14289-1 §7.21.6 tredje stycket kräver att varje Differences-post landar i AGL |
| 10042 | Ett eller flera media clip data-dictionarys (identifierade via /S /MCD, valfritt /Type /MediaClip) saknar den krävda /CT-innehållstypsposten. ISO 14289-1 §7.18.6 höjer denna valfria nyckel från ISO 32000-1 tabell 274 till obligatorisk |
| 10043 | Ett eller flera media clip data-dictionarys saknar den krävda /Alt-arrayen (språksträng + alternativ text-par). ISO 14289-1 §7.18.6 höjer denna valfria nyckel från ISO 32000-1 tabell 274 till obligatorisk så att hjälpmedelsteknik kan annonsera en beskrivning för inbäddad multimedia |
| 10044 | Ett eller flera strukturträdnoder bär mer än ett direkt H-(generisk rubrik)-barn. ISO 14289-1 §7.4.4 förbjuder uttryckligen detta — dela sektionen, eller ersätt H-taggarna med numrerade H1..H6-nivåer |
Anmärkningar
PDF/A-testet är tänkt som en snabb självkontroll före leverans. Det fångar de dokumentnivåproblem som diskvalificerar en fil direkt (fel PDF-version, saknad OutputIntent, saknat strukturträd på A-nivå, kryptering, lager i PDF/A-1). Det går inte igenom varje content stream-operator eller verifierar typsnittsinbäddning och färgrymdsreferenser för varje ritat objekt — de valideringarna kräver en dedikerad PDF/A-validator (som veraPDF). Använd den här funktionen som första linjens kontroll och som regressionsgrind i byggpipelines. Använd CreatePreflightReport eller SavePreflightReport när du vill att biblioteket formaterar problemslistorna till en återanvändbar textrapport. Använd CreatePreflightReportEx eller SavePreflightReportEx för text-, JSON-, HTML- eller CSV-rapportutdata, eller se Preflight Reports för hela rapportflödet
Kompanjon-API:t GetPDFUADiagnostics utför motsvarande kontroller för PDF/UA-1 (ISO 14289-1) på det dokument i minnet som för tillfället byggs, i stället för på en extern fil
När du producerar PDF/A-utdata med det här biblioteket, anropa SetPDFAMode innan du lägger till något innehåll. Genereringssidobevakningen inne i SetPDFAMode blockerar de operationer den valda delen förbjuder, så ett dokument byggt på det sättet klarar normalt CheckFileCompliance automatiskt
Exempel
// 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;Se även
Preflight Reports, CreatePreflightReport, CreatePreflightReportEx, SavePreflightReport, SavePreflightReportEx, ComparePreflightReports, SetPDFAMode, GetPDFUADiagnostics, GetStringListCount, GetStringListItem, SetPDFUAMode