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
| InputFileName | Volledig pad van het te valideren PDF-bestand. Het bestand wordt alleen-lezen geopend en niet gewijzigd |
|---|---|
| Password | Wachtwoord 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 |
| ComplianceTest | De 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) |
| Options | Bitvlaggen 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
| 0 | Het bestand voldoet aan de gekozen standaard |
|---|---|
| Non-zero | Een 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)
| 00002 | De 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 |
|---|---|
| 00003 | De 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 |
| 00005 | Het 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 |
| 00006 | Het document is versleuteld. PDF/A verbiedt versleuteling in elk deel |
| 00007 | De Catalog heeft geen /OutputIntents-entry. Alle PDF/A-delen vereisen een output intent zodat de renderingkleurruimte eenduidig is gedefinieerd |
| 00011 | De Catalog heeft geen /MarkInfo-entry. Alleen vereist voor conformit op a-niveau (PDF/A-1a, 2a, 3a) — tagged PDF moet zichzelf declareren |
| 00012 | De 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)
| 10001 | De 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 |
|---|---|
| 10002 | De 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 |
| 10003 | De 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 |
| 10004 | De Catalog heeft geen /StructTreeRoot-entry. Een PDF/UA-1-bestand moet een logische structuurboom bevatten die de leesvolgorde en semantiek van het document beschrijft |
| 10005 | De /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 |
| 10006 | De 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 |
| 10007 | De 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" |
| 10008 | De /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 |
| 10009 | De /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 |
| 10010 | Het 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 |
| 10011 | Er 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 |
| 10012 | Er 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 |
| 10013 | Een 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 |
| 10014 | Een 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 |
| 10015 | Een 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 |
| 10016 | Een 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 |
| 10017 | Bij 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 |
| 10018 | Een 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 |
| 10019 | Een 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 |
| 10020 | Een 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 |
| 10021 | Een 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) |
| 10022 | Een 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 |
| 10023 | Een 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 |
| 10024 | Het 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 |
| 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 | Een 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 |
| 10027 | Een 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 |
| 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 | Een 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 |
| 10030 | Een 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) |
| 10031 | Een 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 |
| 10032 | Een 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 |
| 10033 | Twee 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 |
| 10034 | Een 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 |
| 10035 | Een 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 |
| 10042 | Een 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 |
| 10043 | Een 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 |
| 10044 | Een 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