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

InputFileNameFullständig sökväg till PDF-filen som ska valideras. Filen öppnas skrivskyddat och ändras inte
PasswordLö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
ComplianceTestStandarden 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).
OptionsBitflaggor 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

0Filen är konform med den valda standarden
Non-zeroEtt 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)

00002PDF-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
00003Catalog: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
00005XMP-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
00006Dokumentet är krypterat. PDF/A förbjuder kryptering i varje del
00007Catalog:en saknar /OutputIntents-post. Alla PDF/A-delar kräver en output intent så att renderingsfärgrymden är entydigt definierad
00011Catalog: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
00012Catalog: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)

10001XMP-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
10002Dokumentets 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
10003Catalog: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
10004Catalog: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
10006Catalog: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
10007XMP-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
10009Dokumentets /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.
10010Filen ä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
10011En 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.
10012En 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
10013Ett 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
10014Ett 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
10015Ett 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
10016Ett 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
10017Ett 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
10018Ett 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
10019Ett 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
10020Ett 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
10021Ett 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)
10022En 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.
10023Ett 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
10024Det 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."
10025Ett 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
10026Ett 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
10027Ett 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
10028Ett 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
10029Ett 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
10030Ett 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)
10031Ett 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
10032Ett 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
10033Två 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
10034Ett 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
10035Ett 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
10042Ett 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
10043Ett 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
10044Ett 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