CheckFileCompliance
Naleving, documentinspectie
PDF/UA-lezerprofielkeuze
PDF/UA-controles kiezen deel 2 wanneer XMP pdfuaid:part=2 identificeert en behouden anders de deel 1-controles; van de hier beschreven oudere PDF/UA-1-controles mag niet worden aangenomen dat ze voor deel 2 gelden
Het PDF/UA-2-profiel implementeert kerncontroles voor identificatie, naamruimten, rollen en structuur; gestructureerde rapporten gebruiken PDF/UA-2 en ISO 14289-2 en vermelden fullCertification=false en de niet-geverifieerde reikwijdte
Gebruik CheckFilePDFUACompliance of RunPDFUAValidationPipelineTask om een doeldeel af te dwingen en GetPDFUAReadValidationCoverageJSON om de grenzen van de mogelijkheden te bekijken
Beschrijving
Leest een extern PDF-bestand en valideert dit tegen een gekozen ISO-nalevingsstandaard. De teruggegeven waarde is nul (het bestand doorstaat de gekozen test volledig) of een niet-nul StringListID-handle die elk gedetecteerd probleem opsomt. Elke invoer in de lijst bestaat uit een korte code, een dubbele punt en een voor mensen leesbare melding — exact hetzelfde codeformaat dat GetPDFUADiagnostics gebruikt. Som de resultaten op met GetStringListCount en GetStringListItemDe PDF/A-test bestrijkt alle zes conformantiemodi (PDF/A-1a, PDF/A-1b, PDF/A-2a, PDF/A-2b, PDF/A-3a, PDF/A-3b) en leest de XMP-invoeren
pdfaid:part/pdfaid:conformance om te bepalen welke regelset moet worden toegepastDe PDF/UA-1-test (toegevoegd in v3.56.0) controleert een externe PDF tegen ISO 14289-1 en geeft diagnostische codes in het
De PDF/UA-1-test (toegevoegd in v3.56.0) toetst een externe PDF aan ISO 14289-1 en geeft diagnostische codes in het bereik 10xxx, zodat ze visueel gescheiden blijven van de PDF/A-codes 00xxx
Syntaxis
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);
Parameters
| InputFileName | Volledig pad van het te valideren PDF-bestand. Het bestand wordt alleen-lezen geopend en niet gewijzigd. |
|---|---|
| Password | Wachtwoord om het bestand te openen. Geef een lege string door voor onversleutelde documenten. Let op: een versleuteld document zakt voor de PDF/A-test (code 00006), ongeacht of het juiste wachtwoord wordt gegeven — PDF/A verbiedt versleuteling. |
| ComplianceTest | De standaard waartegen wordt gecontroleerd. 1 — PDF/A (ISO 19005-1/-2/-3, alle zes conformantieniveaus). 2 — PDF/UA-1 (ISO 14289-1:2014, toegankelijke PDF). 3 — PDF/X (ISO 15930, inclusief de PDF/X-6-familie). 4 — PDF/VT-3 (ISO 16612-3:2020 op een basis van de PDF/X-6-familie). 5 — PDF/R-1 beperkte rasteruitwisseling. 6 — PDF/VCR-1 templates voor vervanging van variabele content. 7 — PDF/E-1 uitwisseling van technische documenten. |
| Options | Bitvlaggen die de test aanpassen. 0 — Standaard: meld elk probleem dat in het document wordt gevonden. 1 — Stop na het eerste probleem en keer onmiddellijk terug. Nuttig wanneer de aanroeper alleen een goedgekeurd/afgekeurd-signaal nodig heeft. |
Retourwaarden
| 0 | Het bestand is conformant met de gekozen standaard. |
|---|---|
| Niet-nul | Een StringListID-handle waarvan de invoeren elke gedetecteerde non-conformantie beschrijven. De handle blijft geldig tot het document wordt gesloten of ReleaseStringList wordt aangeroepen. |
PDF/A-probleemcodes (ComplianceTest = 1)
| 00002 | De PDF-versie overschrijdt het maximum dat het conformantieniveau 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 door PDF/A-1. PDF/A-2 en PDF/A-3 staan lagen toe en activeren deze controle niet. |
| 00005 | Het XMP-paar pdfaid:part+pdfaid:conformance ontbreekt, is misvormd of bevat een waarde buiten de geldige set 1A, 1B, 2A, 2B, 3A, 3B. De bibliotheek kan niet bepalen welke regelset moet worden toegepast, dus dit wordt als fataal probleem gemeld, ongeacht Options. |
| 00006 | Het document is versleuteld. PDF/A verbiedt versleuteling in elk onderdeel. |
| 00007 | De Catalog heeft geen invoer /OutputIntents. Alle PDF/A-onderdelen vereisen een outputintent zodat de renderingkleurruimte ondubbelzinnig is gedefinieerd. |
| 00011 | De Catalog heeft geen invoer /MarkInfo. Alleen vereist voor conformantie op a-niveau (PDF/A-1a, 2a, 3a) — getagde PDF moet zichzelf aankondigen. |
| 00012 | De Catalog heeft geen invoer /StructTreeRoot. Alleen vereist voor conformantie op a-niveau. Een getagd PDF-document moet een logische structuurboom hebben. |
PDF/UA-1-probleemcodes (ComplianceTest = 2)
| 10001 | De XMP-metadatastroom bevat geen pdfuaid:part, of de waarde is niet 1. ISO 14289-1 §5 vereist dat een conformant bestand zich via deze eigenschap identificeert; ISO 14289-1 §6.2 verbiedt het melden van conformantie zonder deze eigenschap. |
|---|---|
| 10002 | De Catalog van het document heeft geen /Metadata-stroom. Een PDF/UA-1-conformantieclaim wordt in deze stroom vastgelegd; zonder deze kan het bestand zich niet als toegankelijk aanduiden. |
| 10003 | Het /MarkInfo-woordenboek van de Catalog ontbreekt of /Marked is niet true. ISO 14289-1 §7.1 vereist dat elk conformant bestand zichzelf als getagd aanmeldt, zodat ondersteunende technologie op de structuurboom kan vertrouwen. |
| 10004 | De Catalog heeft geen invoer /StructTreeRoot. Een PDF/UA-1-bestand moet een logische structuurboom bevatten die de leesvolgorde en semantiek van het document beschrijft. |
| 10005 | Het woordenboek /ViewerPreferences ontbreekt of de invoer /DisplayDocTitle is niet true. ISO 14289-1 §7.1 vereist dat conforme viewers de documenttitel tonen in hun vensterchrome in plaats van de bestandsnaam. |
| 10006 | De Catalog-invoer /Lang ontbreekt of is leeg. ISO 14289-1 §7.2 (met verwijzing naar ISO 32000-1 §14.9.2) vereist dat elk conformant bestand zijn natuurlijke taal aangeeft, zodat schermlezers de juiste stem- en uitspraakregels kiezen. |
| 10007 | De XMP-metadatastroom bevat geen niet-lege Dublin Core dc:title. ISO 14289-1 §7.1 vereist "een dc:title-invoer die het document duidelijk identificeert". |
| 10008 | Het woordenboek /MarkInfo heeft /Suspects op true staan. ISO 14289-1 §7.1: bestanden die PDF/UA-conformantie claimen moeten een Suspects-waarde false hebben — de waarde true markeert de tagging als bekend fouten te bevatten. |
| 10009 | De /RoleMap van het document wijst een of meer standaardstructuurtypen opnieuw toe. ISO 14289-1 §7.1: standaardtags gedefinieerd in ISO 32000-1 §14.8.4 (P, H1..H6, Figure, Table, enz.) mogen niet opnieuw worden toegewezen. De detailregel noemt de eerste standaardtag die opnieuw is toegewezen. |
| 10010 | Het bestand is versleuteld, maar bit 10 van de /P-machtigingssleutel voor versleuteling (masker 512, "Extract for accessibility") is niet ingesteld. ISO 14289-1 §7.16 vereist dat elk versleuteld conformant bestand extractie voor toegankelijkheid toestaat, zodat ondersteunende technologie bij de inhoud kan. |
| 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 conforme bestanden; statische XFA is toegestaan. |
| 10012 | Er is een Reference XObject gedetecteerd (een Form XObject met een /Ref-invoer). ISO 14289-1 §7.20 verbiedt reference XObjects omdat ze één PDF via een verwijzing een andere laten insluiten zonder de gerefereerde inhoud aan ondersteunende technologie bloot te stellen. |
| 10013 | Er zijn een of meer TrapNet-annotaties gedetecteerd. ISO 14289-1 §7.18.2 verbiedt TrapNet expliciet in conforme bestanden. De detailregel meldt hoeveel annotaties zijn gevonden. |
| 10014 | Een of meer pagina's bevatten annotaties maar stellen /Tabs /S niet in hun paginawoordenboek in. ISO 14289-1 §7.18.3 vereist dat de tabvolgorde op dergelijke pagina's de structuurboom volgt, hetgeen wordt aangegeven door /Tabs /S. De detailregel meldt het aantal overtredende pagina's. |
| 10015 | Aan een of meer Link-annotaties ontbreekt een niet-lege alternatieve beschrijving in /Contents. ISO 14289-1 §7.18.5 vereist dat elke Link-annotatie een toegankelijke beschrijving heeft, zodat schermlezers het koppelingsdoel kunnen aankondigen. De detailregel meldt het aantal overtredende Link-annotaties. |
| 10016 | In een of meer FileSpec-woordenboeken van ingesloten bestanden ontbreekt de bestandsnaamsleutel /F. ISO 14289-1 §7.11 vereist dat elke FileSpec van een ingesloten bestand zowel /F als /UF bevat. |
| 10017 | In een of meer FileSpec-woordenboeken van 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 | In een of meer configuratiewoordenboeken voor optionele content ontbreekt een niet-lege tekststring /Name. ISO 14289-1 §7.10 vereist dat elk OCG-configuratiewoordenboek (de standaardinvoer D plus elk woordenboek in OCProperties/Configs) een niet-lege /Name bevat. |
| 10019 | Een of meer configuratiewoordenboeken voor optionele content bevatten de verboden sleutel /AS. ISO 14289-1 §7.10 verbiedt /AS expliciet in elk OCG-configuratiewoordenboek om automatische statusaanpassingen op basis van gebruiksgegevens te voorkomen. |
| 10020 | Een of meer niet-Standard-14-lettertypen waarnaar het document verwijst, sluiten hun lettertypeprogramma niet in (geen invoer FontFile, FontFile2 of FontFile3 op de FontDescriptor). ISO 14289-1 §7.21.4.1 vereist dat elk lettertype dat voor rendering wordt gebruikt zijn programma insluit. Type 3-lettertypen slaan deze controle over omdat hun glyphs inline CharProcs zijn. |
| 10021 | Bij een of meer CIDFontType2-afstammelingen ontbreekt de invoer /CIDToGIDMap. ISO 14289-1 §7.21.3.2 vereist dat elke ingesloten Type 2 CIDFont /CIDToGIDMap bevat (als stream die CIDs naar glyphindices afbeeldt, of als de naam Identity). |
| 10022 | Naar een of meer Standard 14-lettertypen (Helvetica, Times, Courier, Symbol, ZapfDingbats en hun bold / oblique-varianten) wordt verwezen zonder ingesloten lettertypeprogramma. ISO 14289-1 §7.21.4 NOTE 5 maakt duidelijk dat voor de 14 standaard Type 1-lettertypen geen uitzondering op insluiting geldt. |
| 10023 | Bij een of meer lettertypen ontbreekt een /ToUnicode-CMap en ze vallen niet onder de uitzonderingslijst van §7.21.7. Die uitzonderingslijst bestrijkt de voorgedefinieerde MacRomanEncoding / MacExpertEncoding / WinAnsiEncoding, Type 0-lettertypen waarvan de afstammende CIDFont de Adobe-tekensets GB1 / CNS1 / Japan1 / Korea1 gebruikt, en niet-symbolische TrueType-lettertypen. |
| 10024 | Het eerste kopelement in documentvolgorde is niet H1 (of de sterk gestructureerde H). ISO 14289-1 §7.4.2: "Als kophtags worden gebruikt, moet H1 de eerste zijn" |
| 10025 | Er zijn een of meer overgeslagen kopniveaus gedetecteerd in documentvolgorde — bijv. een H1 direct gevolgd door een H3, waarbij H2 wordt overgeslagen. ISO 14289-1 §7.4.2 vereist dat aflopende kopreeksen in strikte numerieke volgorde verlopen zonder tussenliggende niveaus over te slaan. |
| 10026 | Aan een of meer Widget-annotaties ontbreekt de invoer /StructParent. ISO 14289-1 §7.18.4 vereist dat Widget-annotaties zijn genest binnen een Form-structuurtag; zonder /StructParent is de widget vanuit de structuurboom onmogelijk te bereiken. De detailregel meldt het aantal. |
| 10027 | Een of meer Widget-annotaties hebben een /StructParent-invoer, maar de waarde lost via StructTreeRoot/ParentTree niet op naar een structuurelement met /S = Form. ISO 14289-1 §7.18.4 vereist dat elke Widget-annotatie is genest binnen een Form-structuurtag. Mogelijke oorzaken: de /ParentTree-invoer ontbreekt volledig, verwijst naar een niet-StructElem (ruwe integer / MCR-woordenboek) of noemt een niet-Form-tag. |
| 10028 | Een of meer niet-symbolische TrueType-lettertypen hebben een /Encoding (of de /BaseEncoding van een Encoding-woordenboek) die niet MacRomanEncoding of WinAnsiEncoding is. ISO 14289-1 §7.21.6 beperkt niet-symbolische TrueType-encoding tot deze twee voorgedefinieerde namen. |
| 10029 | Een of meer symbolische TrueType-lettertypen hebben een /Encoding-invoer in het lettertypewoordenboek. ISO 14289-1 §7.21.6 vierde alinea verbiedt dat — symbolische TrueType-encoding moet uitsluitend tot uitdrukking komen via de cmap-tabel van het ingesloten lettertypeprogramma. |
| 10030 | Bij een of meer L-(lijst-)structuurelementen ontbreekt het attribuut ListNumbering. ISO 14289-1 §7.6 vereist dat elke L-tag zijn nummeringsstijl via dit attribuut aangeeft. Geldige waarden zijn None, Disc, Circle, Square, Decimal, UpperRoman, LowerRoman, UpperAlpha en LowerAlpha (ISO 32000-1 Table 347). |
| 10031 | Een of meer Link-annotaties bevatten een URI-actiewoordenboek waarvan de /IsMap-invoer true is. ISO 14289-1 §7.18.5 verbiedt /IsMap = true bij een URI-actie, tenzij gelijkwaardige functionaliteit elders in de content zonder /IsMap-sleutel wordt geboden. Auteurs met een legitiem IsMap-gebruiksgeval moeten deze diagnose zelf onderdrukken. |
| 10032 | Bij een of meer Note-structuurelementen ontbreekt de invoer /ID. ISO 14289-1 §7.9 vereist dat elke Note-tag een unieke /ID aangeeft, zodat kruisverwijzingen op een stabiel doel kunnen uitkomen. |
| 10033 | Twee of meer Note-structuurelementen delen dezelfde /ID-waarde. De detailregel meldt 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 gewiste Symbolic-vlag, FontFile2-stream aanwezig) sluiten een cmap-tabel in waarvan de enige subtabel de symbolische (3,0)-Microsoft-invoer is. ISO 14289-1 §7.21.6 eerste alinea vereist ten minste één niet-symbolische cmap-subtabel, zodat het programma de codepunten kan renderen die zijn /Encoding aangeeft. |
| 10035 | Een of meer niet-symbolische TrueType-lettertypen declareren een /Encoding met een /Differences-array met glyphnamen die geen onderdeel zijn van de Adobe Glyph List 2.0. .notdef staat op de uitzonderingslijst omdat de specificatie dit impliciet toestaat. ISO 14289-1 §7.21.6 derde alinea vereist dat elke Differences-invoer in de AGL uitkomt. |
| 10036 | De breedten van een of meer eenvoudige TrueType-lettertypen wijken meer dan één duizendste em af van de overeenkomstige metrics in het ingesloten lettertypeprogramma. ISO 14289-1 §7.21.5 vereist dat de /Widths-array overeenkomt met de ingesloten glyphmetrics. |
| 10037 | De breedten van een of meer CIDFontType2 wijken meer dan één duizendste em af van de overeenkomstige metrics in het ingesloten TrueType-programma. ISO 14289-1 §7.21.5 vereist dat de /W-array overeenkomt met de ingesloten glyphmetrics. |
| 10038 | Een /CharSet van een Type 1-lettertypebeschrijving laat een of meer glyphnamen weg die in het ingesloten lettertypeprogramma voorkomen. ISO 14289-1 §7.21.4.2 vereist dat de invoer elke ingesloten glyph opsomt. |
| 10039 | Een /CIDSet van een CID-lettertypebeschrijving laat een of meer CIDs weg die naar glyphs in het ingesloten lettertypeprogramma verwijzen. ISO 14289-1 §7.21.4.2 vereist dat de bitset elke ingesloten CID identificeert. |
| 10040 | Een Form XObject met tekst wordt vanuit pagina-inhoud buiten gemarkeerde content aangeroepen. ISO 14289-1 §7.20 vereist dat de inhoud van een Form XObject in structuurelementen wordt opgenomen. |
| 10041 | Een of meer operanden voor het tonen van tekst verwijzen naar de glyph .notdef. ISO 14289-1 §7.21.8 verbiedt verwijzingen naar .notdef, ongeacht de tekstrenderingsmodus. |
| 10042 | In een of meer media clip data-woordenboeken (geïdentificeerd door /S /MCD, optioneel /Type /MediaClip) ontbreekt de vereiste contenttype-invoer /CT. ISO 14289-1 §7.18.6 verheft deze optionele sleutel uit ISO 32000-1 Table 274 tot verplicht. |
| 10043 | In een of meer media clip data-woordenboeken ontbreekt de vereiste /Alt-array (paren van taalstring + alternatieve tekst). ISO 14289-1 §7.18.6 verheft deze optionele sleutel uit ISO 32000-1 Table 274 tot verplicht, zodat ondersteunende technologie een beschrijving voor ingesloten multimedia kan aankondigen. |
| 10044 | Een of meer knooppunten in de structuurboom hebben meer dan één direct H-(algemene kop-)kind. ISO 14289-1 §7.4.4 verbiedt dit expliciet — splits de sectie, of vervang de H-tags door genummerde niveaus H1..H6. |
Opmerkingen
De PDF/A-test is bedoeld als snelle zelfcontrole vóór oplevering. Hij vangt de problemen op documentniveau die een bestand ronduit diskwalificeren (verkeerde PDF-versie, ontbrekende OutputIntent, ontbrekende structuurboom op A-niveau, versleuteling, lagen in PDF/A-1). Hij doorloopt niet elke contentstream-operator en verifieert evenmin lettertype-insluiting of kleurruimteverwijzingen per getekend object — die validaties vereisen een specifieke PDF/A-validator (zoals veraPDF). Gebruik deze functie als eerste controle en als regressiepoort in buildpipelines. Gebruik CreatePreflightReport of SavePreflightReport wanneer u wilt dat de bibliotheek de probleemlijsten opmaakt in een herbruikbaar tekstrapport. Gebruik CreatePreflightReportEx of SavePreflightReportEx voor rapportuitvoer in tekst, JSON, HTML of CSV, of zie Preflight Reports voor de volledige rapportworkflowDe companion-API
GetPDFUADiagnostics voert vergelijkbare controles voor PDF/UA (ISO 14289-1) uit op het in-memory document dat momenteel wordt gebouwd, in plaats van op een extern bestandWanneer u met deze bibliotheek PDF/A-uitvoer produceert, roept u
SetPDFAMode aan voordat u inhoud toevoegt. De generation-side guard in SetPDFAMode blokkeert de bewerkingen die het gekozen onderdeel verbiedt, zodat een document dat op die manier wordt gebouwd normaal gesproken automatisch door CheckFileCompliance komt
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
Nalevingstest 3 controleert PDF/X (ISO 15930): editie-identificatie, output intent, paginageometrie, ingesloten fonts en de verboden-functieset; voor PDF/X-6 valideert hij ook annotatievlaggen en vaste appearances, AcroForm- en handtekeningappearances, uitsluitingen voor XFA en viewergegenereerde appearances, actieplaatsing, actieketens, de toegestane set named actions en elke UseBlackPtComp-waarde
Nalevingstest 4 controleert PDF/VT-3-identificatiemetadata, de PDF/X-6-familiebasis daarvan, de DPartRoot- en DPart-graaf, DPM-namen en -waarden, recordniveau, paginavolgorde en exacte bladdekking; de samengestelde controles delen één parserpassage
Nalevingstest 5 controleert PDF/R-1-markerplaatsing, -versie en -versleuteling, indirecte objecten van generatie nul, beperkte woordenboeken en filters, paginaprogramma's in één stream, geordende rasterstroken, afbeeldingscoderingen, paginadekking en effectieve resolutie; hij kan een gedeelde validatiepijplijnpassage hergebruiken
Nalevingstest 6 controleert de PDF/X-basis en de PDF/VCR-1 XMP-identificatie, de enkele directe templateroot, de gedeclareerde velden, het optionele paginaselectieveld en elke PassThrough-vervangplaceholder op bladniveau, paginabinding, MCID en bounding box; hij kan een gedeelde validatiepijplijnpassage hergebruiken
Nalevingstest 7 controleert PDF/E-1-identificatie en lifecycle-metadata, trailer-identificatoren, toegestane versleuteling, output intents en apparaatkleurruimten, inhoudsoperators, fonts, annotaties, formulieren, optional content, acties, verwijzingen naar externe bestanden, graphics states en 3D-streambeperkingen; hij kan een gedeelde validatiepijplijnpassage hergebruiken