CheckFileComplianceA

Naleving, documentinspectie

Beschrijving

Het achtervoegsel A duidt het ANSI-toegangspunt (char) van de DLL aan; het ActiveX/COM-oppervlak stelt alleen de Unicode-vorm beschikbaar. Het gedrag is identiek aan CheckFileCompliance en tekenreeksargumenten worden geïnterpreteerd met behulp van de huidige SetAnsiMode-codetabel

Leest een extern PDF-bestand en valideert het tegen een gekozen ISO-conformiteitsstandaard. De retourwaarde is nul (bestand slaagt probleemloos voor de gekozen test) of een StringListID-handle ongelijk aan nul die elke gedetecteerde bevinding opsomt. Elke entry in de lijst is een korte code, een dubbele punt en een voor mensen leesbare melding — precies hetzelfde codeformaat dat GetPDFUADiagnostics gebruikt. Inventariseer het resultaat met GetStringListCount en GetStringListItem

De PDF/A-test dekt alle zes conformit modi (PDF/A-1a, PDF/A-1b, PDF/A-2a, PDF/A-2b, PDF/A-3a, PDF/A-3b) en leest de XMP-entries pdfaid:part/pdfaid:conformance om te bepalen welke regelset van toepassing is

De PDF/UA-1-test (toegevoegd in v3.56.0) controleert een externe PDF tegen ISO 14289-1 en geeft diagnostische codes uit in het bereik 10xxx, zodat die visueel gescheiden blijven van de PDF/A-codes 00xxx

Syntaxis

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);

Parameters

InputFileNameVolledig pad van het te valideren PDF-bestand. Het bestand wordt alleen-lezen geopend en niet gewijzigd
PasswordWachtwoord waarmee het bestand wordt geopend. Geef een lege string door voor niet-versleutelde documenten. Let op: een versleuteld document zakt altijd voor de PDF/A-test (code 00006), ook met het juiste wachtwoord — PDF/A verbiedt versleuteling
ComplianceTestDe standaard waartegen wordt gecontroleerd.

1 — PDF/A (ISO 19005-1/-2/-3, alle zes conformit niveaus)
2 — PDF/UA-1 (ISO 14289-1:2014, toegankelijke PDF)
OptionsBitvlaggen die de test bijsturen.

0 — Standaard: meld elke bevinding in het document
1 — Stop na de eerste bevinding en geef direct terug. Handig wanneer de aanroeper alleen een pass/fail-signaal nodig heeft

Retourwaarden

0Het bestand voldoet aan de gekozen standaard
Non-zeroEen StringListID-handle waarvan de entries elke gedetecteerde non-conformance beschrijven. De handle blijft geldig totdat het document wordt gesloten of ReleaseStringList wordt aangeroepen

PDF/A issue codes (ComplianceTest = 1)

00002De PDF-versie overstijgt het maximum dat het conformiteitniveau toestaat (PDF/A-1 stopt bij 1.4; PDF/A-2 en PDF/A-3 bij 1.7). De detailregel noemt de overtredende versie en het toegestane maximum
00003De Catalog bevat /OCProperties (optionele content / lagen), verboden in PDF/A-1. PDF/A-2 en PDF/A-3 staan lagen toe en triggeren deze controle niet
00005Het paar XMP pdfaid:part+pdfaid:conformance ontbreekt, is misvormd of bevat een waarde buiten de geldige set 1A, 1B, 2A, 2B, 3A, 3B. De library kan niet bepalen welke regelset van toepassing is, dus dit wordt ongeacht Options als fatale bevinding gemeld
00006Het document is versleuteld. PDF/A verbiedt versleuteling in elk deel
00007De Catalog heeft geen /OutputIntents-entry. Alle PDF/A-delen vereisen een output intent zodat de renderingkleurruimte eenduidig is gedefinieerd
00011De Catalog heeft geen /MarkInfo-entry. Alleen vereist voor conformit op a-niveau (PDF/A-1a, 2a, 3a) — tagged PDF moet zichzelf declareren
00012De Catalog heeft geen /StructTreeRoot-entry. Alleen vereist voor conformit op a-niveau. Een tagged-PDF-document moet een logische structuurboom hebben

PDF/UA-1 issue codes (ComplianceTest = 2)

10001De XMP-metadatastream bevat geen pdfuaid:part, of de waarde is niet 1. ISO 14289-1 §5 vereist dat een conformerend bestand zichzelf via deze property identificeert; ISO 14289-1 §6.2 verbiedt het melden van conformiteit zonder die
10002De document Catalog heeft geen /Metadata-stream. Een PDF/UA-1-conformiteitsclaim wordt in deze stream vastgelegd; zonder die kan het bestand zichzelf niet als toegankelijk aandienen
10003De Catalog /MarkInfo-woordenboek ontbreekt of /Marked is niet true. ISO 14289-1 §7.1 vereist dat elk conformerend bestand zichzelf als getagd declareert, zodat hulptechnologie op de structuurboom kan vertrouwen
10004De Catalog heeft geen /StructTreeRoot-entry. Een PDF/UA-1-bestand moet een logische structuurboom bevatten die de leesvolgorde en semantiek van het document beschrijft
10005De /ViewerPreferences-woordenboek ontbreekt of zijn /DisplayDocTitle-entry is niet true. ISO 14289-1 §7.1 vereist dat conformerende readers de documenttitel in hun vensterchrome tonen in plaats van de bestandsnaam
10006De Catalog /Lang-entry ontbreekt of is leeg. ISO 14289-1 §7.2 (verwijzend naar ISO 32000-1 §14.9.2) vereist dat elk conformerend bestand zijn natuurlijke taal declareert, zodat screenreaders de juiste stem- en uitspraakregels kiezen
10007De XMP-metadatastream draagt geen niet-lege Dublin Core dc:title. ISO 14289-1 §7.1 vereist "een dc:title-entry die het document duidelijk identificeert"
10008De /MarkInfo-woordenboek heeft /Suspects op true staan. ISO 14289-1 §7.1: bestanden die PDF/UA-conformiteit claimen moeten een Suspects-waarde false hebben — de waarde true markeert de tagging als bekend foutief
10009De /RoleMap van het document mapt een of meer standaardstructuurtypen opnieuw. ISO 14289-1 §7.1: standaardtags gedefinieerd in ISO 32000-1 §14.8.4 (P, H1..H6, Figure, Table, enz.) mogen niet opnieuw worden gemapt. De detailregel noemt de eerste standaardtag die opnieuw is gemapt
10010Het bestand is versleuteld, maar bit 10 van de versleutelings-rechtensleutel /P (masker 512, "Extract for accessibility") is niet gezet. ISO 14289-1 §7.16 vereist dat elk versleuteld conformerend bestand accessibility-extractie toestaat zodat hulptechnologie de inhoud kan bereiken
10011Er is een dynamisch XFA-formulier gedetecteerd: het XFA XDP-pakket bevat <dynamicRender>required</dynamicRender>. ISO 14289-1 §7.15 verbiedt dynamische XFA-formulieren in conformerende bestanden; statische XFA is toegestaan
10012Er is een Reference XObject aangetroffen (een Form XObject met een /Ref-entry). ISO 14289-1 §7.20 verbiedt Reference XObjects, omdat ze het ene PDF-bestand via een verwijzing een ander laten insluiten zonder de gerefereerde inhoud beschikbaar te maken voor hulptechnologie
10013Een of meer TrapNet-annotaties zijn gedetecteerd. ISO 14289-1 §7.18.2 verbiedt TrapNet expliciet in conformerende bestanden. De detailregel rapporteert hoeveel annotaties zijn gevonden
10014Een of meer pagina's dragen annotaties maar zetten /Tabs /S niet in hun paginawoordenboek. ISO 14289-1 §7.18.3 vereist dat de tabvolgorde op zulke pagina's de structuurboom volgt, wat wordt gesignaleerd door /Tabs /S. De detailregel rapporteert het aantal overtredende pagina's
10015Een of meer Link-annotaties missen een niet-lege /Contents-alternatieve beschrijving. ISO 14289-1 §7.18.5 vereist dat elke Link-annotatie een toegankelijke beschrijving draagt zodat screenreaders het linkdoel kunnen aankondigen. De detailregel rapporteert het aantal overtredende Link-annotaties
10016Een of meer ingesloten-bestand-FileSpec-woordenboeken missen de /F-bestandsnaamsleutel. ISO 14289-1 §7.11 vereist dat elke ingesloten-bestand-FileSpec zowel /F als /UF draagt
10017Bij een of meer FileSpec-dictionaries voor ingesloten bestanden ontbreekt de Unicode-bestandsnaamsleutel /UF. ISO 14289-1 §7.11 vereist dat elke FileSpec van een ingesloten bestand zowel /F als /UF bevat
10018Een of meer optional-content configuration-woordenboeken missen een niet-lege /Name-tekststring. ISO 14289-1 §7.10 vereist dat elk OCG-configuratiewoordenboek (de standaard D-entry plus elk woordenboek in OCProperties/Configs) een niet-lege /Name draagt
10019Een of meer optional-content configuration-woordenboeken bevatten de verboden /AS-sleutel. ISO 14289-1 §7.10 verbiedt /AS expliciet in elk OCG-configuratiewoordenboek om automatische statusaanpassingen op basis van gebruiksinfo te voorkomen
10020Een of meer door het document gerefereerde non-Standard-14-fonts embedden hun fontprogramma niet (geen FontFile-, FontFile2- of FontFile3-entry op de FontDescriptor). ISO 14289-1 §7.21.4.1 vereist dat elk font dat voor rendering wordt gebruikt zijn programma inbedt. Type 3-fonts slaan deze controle over omdat hun glyphs inline CharProcs zijn
10021Een of meer CIDFontType2-afstammelingen missen de /CIDToGIDMap-entry. ISO 14289-1 §7.21.3.2 vereist dat elk ingebed Type 2 CIDFont /CIDToGIDMap meedraagt (als stream die CIDs op glyph-indexen mapt, of als de naam Identity)
10022Een of meer Standard 14-fonts (Helvetica, Times, Courier, Symbol, ZapfDingbats en hun bold-/oblique-varianten) worden gerefereerd zonder ingebed fontprogramma. ISO 14289-1 §7.21.4 NOTE 5 maakt duidelijk dat er voor de 14 standaard Type 1-fonts geen uitzondering op het inbedden bestaat
10023Een of meer fonts missen een /ToUnicode-CMap en vallen niet onder de vrijstellingslijst van §7.21.7. De vrijstellingslijst dekt de vooraf gedefinieerde MacRomanEncoding / MacExpertEncoding / WinAnsiEncoding, Type 0-fonts waarvan de CIDFont-afstammeling de Adobe GB1 / CNS1 / Japan1 / Korea1-tekencollecties gebruikt, en niet-symbolische TrueType-fonts
10024Het eerste heading-element in documentvolgorde is geen H1 (of de H voor sterk gestructureerde documenten). ISO 14289-1 §7.4.2: als heading-tags worden gebruikt, moet H1 de eerste zijn
10025One 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.
10026Een of meer Widget-annotaties missen een /StructParent-entry. ISO 14289-1 §7.18.4 vereist dat Widget-annotaties genest zijn binnen een Form-structuurtag; zonder /StructParent is de Widget vanuit de structuurboom hoe dan ook niet te bereiken. De detailregel rapporteert de telling
10027Een of meer Widget-annotaties hebben een /StructParent-item, maar de waarde ervan kan via StructTreeRoot/ParentTree niet worden opgelost naar een structuurelement met /S = Form. ISO 14289-1 §7.18.4 vereist dat elke Widget-annotatie binnen een Form-structuurtag is genest. Mogelijke oorzaken: het item /ParentTree ontbreekt volledig, verwijst naar een niet-StructElem (raw integer / MCR dict) of noemt een niet-Form-tag
10028One 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.
10029Een of meer symbolische TrueType-lettertypen bevatten een /Encoding-vermelding in het lettertypedictionary. ISO 14289-1 §7.21.6, de vierde alinea, verbiedt dit — symbolische TrueType-encoding mag alleen via de cmap-tabel van het ingebedde fontprogramma's worden uitgedrukt
10030Een of meer L (list)-structuurelementen missen het attribuut ListNumbering. ISO 14289-1 §7.6 vereist dat elke L-tag zijn nummeringsstijl via dit attribuut declareert. Geldige waarden zijn None, Disc, Circle, Square, Decimal, UpperRoman, LowerRoman, UpperAlpha en LowerAlpha (ISO 32000-1 Table 347)
10031Een of meer Link-annotaties dragen een URI action dictionary waarvan de /IsMap-entry true is. ISO 14289-1 §7.18.5 verbiedt /IsMap = true op een URI-actie tenzij equivalente functionaliteit elders in de inhoud zonder /IsMap-sleutel wordt geboden. Auteurs met een legitiem IsMap-gebruikgeval onderdrukken deze diagnose zelf
10032Een of meer Note-structuurelementen missen de /ID-entry. ISO 14289-1 §7.9 vereist dat elke Note-tag een unieke /ID declareert zodat kruisverwijzingen op een stabiel doel kunnen landen
10033Twee of meer Note-structuurelementen delen dezelfde /ID-waarde. De detailregel rapporteert het aantal gedetecteerde duplicaatparen. ISO 14289-1 §7.9 vereist dat Note-ID's uniek zijn binnen het document
10034Een of meer niet-symbolische TrueType-programma's (FontDescriptor met de vlag Symbolic gewist, FontFile2-stream aanwezig) embedden een cmap-tabel waarvan de ene subtabel de symbolische (3,0)-Microsoft-entry is. De eerste alinea van ISO 14289-1 §7.21.6 vereist ten minste één niet-symbolische cmap-subtabel zodat het programma de codepoints kan renderen die zijn /Encoding declareert
10035Een of meer niet-symbolische TrueType-lettertypen declareren een /Encoding met een /Differences-array die glyphnamen bevat die geen leden zijn van de Adobe Glyph List 2.0. .notdef is toegestaan omdat de specificatie dit impliciet toestaat. ISO 14289-1 §7.21.6, de derde alinea, vereist dat elke Differences-vermelding in AGL terechtkomt
10042Een of meer media clip data-woordenboeken (herkenbaar aan /S /MCD, optioneel /Type /MediaClip) missen de vereiste /CT-contenttype-entry. ISO 14289-1 §7.18.6 promoveert deze optionele sleutel uit ISO 32000-1 Table 274 tot verplicht
10043Een of meer media clip data-woordenboeken missen de vereiste /Alt-array (taalstring + alternatieve-tekst-paren). ISO 14289-1 §7.18.6 promoveert deze optionele sleutel uit ISO 32000-1 Table 274 tot verplicht, zodat hulptechnologie een beschrijving voor ingesloten multimedia kan aankondigen
10044Een of meer structuurboomknopen dragen meer dan één direct H-(algemene kop-)child. ISO 14289-1 §7.4.4 verbiedt dat expliciet — splits de sectie of vervang de H-tags door genummerde H1..H6-niveaus

Opmerkingen

De PDF/A-test is bedoeld als snelle zelfcontrole vóór oplevering. Hij vangt de bevindingen op documentniveau die een bestand ronduit afkeuren (verkeerde PDF-versie, ontbrekende OutputIntent, ontbrekende structuurboom op A-niveau, versleuteling, lagen in PDF/A-1). Hij loopt niet elke contentstream-operator af en verifieert geen fontinbedding of kleurruimtereferenties per getekend object — die validaties vereisen een toegewijde PDF/A-validator (zoals veraPDF). Gebruik deze functie als eerste-lijnscontrole en als regressiepoort in buildpipelines. Gebruik CreatePreflightReport of SavePreflightReport wanneer je de library de bevindingenlijsten in een herbruikbaar tekstrapport wilt laten gieten. Gebruik CreatePreflightReportEx of SavePreflightReportEx voor rapportuitvoer als tekst, JSON, HTML of CSV, of zie Preflight Reports voor de volledige rapportworkflow

De zuster-API GetPDFUADiagnostics voert vergelijkbare controles uit voor PDF/UA-1 (ISO 14289-1) op het in-memory document dat momenteel wordt gebouwd, in plaats van op een extern bestand

Roep bij het produceren van PDF/A-uitvoer met deze library SetPDFAMode aan voordat je inhoud toevoegt. De generatiezijdige bewaking in SetPDFAMode blokkeert de bewerkingen die het gekozen deel verbiedt, dus een document dat zo wordt gebouwd slagt normaal automatisch voor CheckFileCompliance

Voorbeeld

// 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;

Zie ook

Preflight Reports, CreatePreflightReport, CreatePreflightReportEx, SavePreflightReport, SavePreflightReportEx, ComparePreflightReports, SetPDFAMode, GetPDFUADiagnostics, GetStringListCount, GetStringListItem, SetPDFUAMode