CheckFileCompliance
Overholdelse, dokumentinspektion
Beskrivelse
Læser en ekstern PDF-fil og validerer den mod en valgt ISO-overholdelsesstandard. Den returnerede værdi er enten nul (filen består den valgte test fejlfrit) eller et StringListID-handle forskelligt fra nul, som lister hvert fundet problem. Hver indgang i listen er en kort kode, et kolon og en menneskelæsbar meddelelse — præcis samme kodeformat, som GetPDFUADiagnostics bruger. Oplist resultatet med GetStringListCount og GetStringListItemPDF/A-testen dækker alle seks overholdelsestilstande (PDF/A-1a, PDF/A-1b, PDF/A-2a, PDF/A-2b, PDF/A-3a, PDF/A-3b) og læser XMP-indgangene
pdfaid:part/pdfaid:conformance for at afgøre, hvilket regelsæt der skal anvendesPDF/UA-1-testen (tilføjet i v3.56.0) tjekker en ekstern PDF mod ISO 14289-1 og udsender diagnostiske koder i
10xxx-intervallet, så de forbliver visuelt adskilt fra PDF/A-koderne 00xxx
Syntaks
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);
Parametre
| InputFileName | Fuld sti til den PDF-fil, der skal valideres. Filen åbnes skrivebeskyttet og ændres ikke. |
|---|---|
| Password | Adgangskode til at åbne filen. Send en tom streng for ukrypterede dokumenter. Bemærk, at et krypteret dokument fejler PDF/A-testen (kode 00006), uanset om den korrekte adgangskode angives — PDF/A forbyder kryptering. |
| ComplianceTest | Den standard, der skal tjekkes imod. 1 — PDF/A (ISO 19005-1/-2/-3, alle seks overholdelsesniveauer). 2 — PDF/UA-1 (ISO 14289-1:2014, tilgængelig PDF). 3 — PDF/X (ISO 15930, inklusive PDF/X-6-familien). 4 — PDF/VT-3 (ISO 16612-3:2020 over en PDF/X-6-familiebase). 5 — PDF/R-1 begrænset rasterudveksling. 6 — PDF/VCR-1 skabeloner til udskiftning af variabelt indhold. 7 — PDF/E-1 udveksling af ingeniørdokumenter. |
| Options | Bitflag, der ændrer testen. 0 — Standard: rapportér hvert fundet problem i dokumentet. 1 — Stop efter det første problem og returnér straks. Nyttigt, når kalderen kun behøver et bestået/fejlet-signal. |
Returværdier
| 0 | Filen er i overensstemmelse med den valgte standard. |
|---|---|
| Ikke-nul | Et StringListID-handle, hvis indgange beskriver hver konstateret manglende overensstemmelse. Handlet forbliver gyldigt, indtil dokumentet lukkes, eller ReleaseStringList kaldes. |
PDF/A-problemkoder (ComplianceTest = 1)
| 00002 | PDF-versionen overstiger det maksimum, som overholdelsesniveauet tillader (PDF/A-1 stopper ved 1.4; PDF/A-2 og PDF/A-3 ved 1.7). Detallinjen nævner den pågældende version og det tilladte maksimum. |
|---|---|
| 00003 | Kataloget indeholder /OCProperties (valgfrit indhold/lag), som PDF/A-1 forbyder. PDF/A-2 og PDF/A-3 tillader lag og udløser ikke denne kontrol. |
| 00005 | XMP-parret pdfaid:part+pdfaid:conformance mangler, er misdannet eller indeholder en værdi uden for det lovlige sæt 1A, 1B, 2A, 2B, 3A, 3B. Biblioteket kan ikke afgøre, hvilket regelsæt der skal anvendes, så det rapporteres som et alvorligt problem uanset Options. |
| 00006 | Dokumentet er krypteret. PDF/A forbyder kryptering i alle dele. |
| 00007 | Kataloget har ingen /OutputIntents-indgang. Alle PDF/A-dele kræver et output intent, så renderingsfarverummet er entydigt defineret. |
| 00011 | Kataloget har ingen /MarkInfo-indgang. Påkrævet kun for a-niveau-overholdelse (PDF/A-1a, 2a, 3a) — mærket PDF skal erklære sig selv. |
| 00012 | Kataloget har ingen /StructTreeRoot-indgang. Påkrævet kun for a-niveau-overholdelse. Et mærket PDF-dokument skal have et logisk strukturtræ. |
PDF/UA-1-problemkoder (ComplianceTest = 2)
| 10001 | XMP-metadatastrømmen indeholder ikke pdfuaid:part, eller værdien er ikke 1. ISO 14289-1 §5 kræver, at en konform fil identificerer sig selv via denne egenskab; ISO 14289-1 §6.2 forbyder at rapportere overensstemmelse uden den. |
|---|---|
| 10002 | Dokumentkataloget har ingen /Metadata-stream. Et PDF/UA-1-overensstemmelseskrav registreres i denne stream; uden den kan filen ikke annoncere sig selv som tilgængelig. |
| 10003 | Katalogets /MarkInfo-ordbog mangler, eller /Marked er ikke true. ISO 14289-1 §7.1 kræver, at enhver konform fil erklærer sig som mærket, så hjælpeteknologi kan stole på strukturtræet. |
| 10004 | Kataloget har ingen /StructTreeRoot-indgang. En PDF/UA-1-fil skal indeholde et logisk strukturtræ, der beskriver dokumentets læserækkefølge og semantik. |
| 10005 | /ViewerPreferences-ordbogen mangler, eller dens /DisplayDocTitle-indgang er ikke true. ISO 14289-1 §7.1 kræver, at konforme læsere viser dokumenttitlen i deres vinduesramme i stedet for filnavnet. |
| 10006 | Katalogets /Lang-indgang mangler eller er tom. ISO 14289-1 §7.2 (med henvisning til ISO 32000-1 §14.9.2) kræver, at enhver konform fil erklærer sit naturlige sprog, så skærmlæsere vælger den korrekte stemme og udtaleregler. |
| 10007 | XMP-metadatastrømmen bærer ikke en ikke-tom Dublin Core-dc:title. ISO 14289-1 §7.1 kræver "en dc:title-indgang, som klart identificerer dokumentet". |
| 10008 | /MarkInfo-ordbogen har /Suspects sat til true. ISO 14289-1 §7.1: filer, der hævder PDF/UA-overensstemmelse, skal have en Suspects-værdi på false — en værdi på true markerer mærkningen som kendt for at indeholde fejl. |
| 10009 | Dokumentets /RoleMap viderafbilder en eller flere standardstrukturtyper. ISO 14289-1 §7.1: standardmærker defineret i ISO 32000-1 §14.8.4 (P, H1..H6, Figure, Table osv.) må ikke viderafbildes. Detallinjen nævner det første standardmærke, der blev viderafbildet. |
| 10010 | Filen er krypteret, men bit 10 af krypteringens /P-tilladelsesnøgle (maske 512, "Extract for accessibility") er ikke sat. ISO 14289-1 §7.16 kræver, at enhver krypteret konform fil tillader tilgængelighedsudtrækning, så hjælpeteknologi kan nå indholdet. |
| 10011 | En dynamisk XFA-formular blev fundet: XFA XDP-pakken indeholder <dynamicRender>required</dynamicRender>. ISO 14289-1 §7.15 forbyder dynamiske XFA-formularer i konforme filer; statisk XFA er tilladt. |
| 10012 | Et Reference XObject (Form XObject med en /Ref-indgang) blev fundet. ISO 14289-1 §7.20 forbyder reference-XObjects, fordi de lader én PDF indlejre en anden ved reference uden at eksponere det refererede indhold for hjælpeteknologi. |
| 10013 | Én eller flere TrapNet-annoteringer blev fundet. ISO 14289-1 §7.18.2 forbyder udtrykkeligt TrapNet i konforme filer. Detallinjen rapporterer, hvor mange annoteringer der blev fundet. |
| 10014 | Én eller flere sider bærer annoteringer, men sætter ikke /Tabs /S i deres sideordbog. ISO 14289-1 §7.18.3 kræver, at tabulatorrækkefølgen på sådanne sider følger strukturtræet, hvilket signaleres af /Tabs /S. Detallinjen rapporterer antallet af pågældende sider. |
| 10015 | Én eller flere Link-annoteringer mangler en ikke-tom /Contents-alternativbeskrivelse. ISO 14289-1 §7.18.5 kræver, at hver Link-annotering bærer en tilgængelig beskrivelse, så skærmlæsere kan annoncere linkmålet. Detallinjen rapporterer antallet af pågældende Link-annoteringer. |
| 10016 | Én eller flere FileSpec-ordbøger for indlejrede filer mangler /F-filnavnsnøglen. ISO 14289-1 §7.11 kræver, at hver FileSpec for indlejret fil bærer både /F og /UF. |
| 10017 | Én eller flere FileSpec-ordbøger for indlejrede filer mangler /UF-nøglen til Unicode-filnavn. ISO 14289-1 §7.11 kræver, at hver FileSpec for indlejret fil bærer både /F og /UF. |
| 10018 | Én eller flere konfigurationsordbøger for valgfrit indhold mangler en ikke-tom /Name-tekststreng. ISO 14289-1 §7.10 kræver, at hver OCG-konfigurationsordbog (standard-D-indgangen plus hver ordbog i OCProperties/Configs) bærer en ikke-tom /Name. |
| 10019 | Én eller flere konfigurationsordbøger for valgfrit indhold indeholder den forbudte /AS-nøgle. ISO 14289-1 §7.10 forbyder udtrykkeligt /AS i enhver OCG-konfigurationsordbog for at forhindre automatiske tilstandesjusteringer drevet af brugsinformation. |
| 10020 | Én eller flere ikke-Standard-14-skrifttyper, som dokumentet refererer til, indlejrer ikke deres skriftprogram (ingen FontFile-, FontFile2- eller FontFile3-indgang på FontDescriptor). ISO 14289-1 §7.21.4.1 kræver, at hver skrifttype, der bruges til rendering, indlejrer sit program. Type 3-skrifttyper springer denne kontrol over, fordi deres glyffer er inline CharProcs. |
| 10021 | Én eller flere CIDFontType2-efterkommere mangler /CIDToGIDMap-indgangen. ISO 14289-1 §7.21.3.2 kræver, at hver indlejret Type 2 CIDFont bærer /CIDToGIDMap (enten som en stream, der afbilder CID'er til glyfindeks, eller som navnet Identity). |
| 10022 | Én eller flere Standard 14-skrifttyper (Helvetica, Times, Courier, Symbol, ZapfDingbats og deres fed/skrå varianter) refereres uden et indlejret skriftprogram. ISO 14289-1 §7.21.4 NOTE 5 gør klart, at der ikke er fritagelse fra indlejring for de 14 standard Type 1-skrifttyper. |
| 10023 | Én eller flere skrifttyper mangler en /ToUnicode-CMap og matcher ikke §7.21.7-fritagelseslisten. Fritagelseslisten dækker de foruddefinerede MacRomanEncoding / MacExpertEncoding / WinAnsiEncoding, Type 0-skrifttyper, hvis efterkommer-CIDFont bruger Adobes GB1 / CNS1 / Japan1 / Korea1-tegnsamlinger, og ikke-symboliske TrueType-skrifttyper. |
| 10024 | Det første overskriftselement i dokumentrækkefølgen er ikke H1 (eller det stærkt strukturerede H). ISO 14289-1 §7.4.2: "Hvis overskriftsmærker bruges, skal H1 være det første." |
| 10025 | Én eller flere spring i overskriftsniveau blev fundet i dokumentrækkefølgen — f.eks. en H1 umiddelbart efterfulgt af en H3, hvor H2 springes over. ISO 14289-1 §7.4.2 kræver, at faldende overskriftsekvenser skrider frem i streng numerisk rækkefølge uden at springe mellemliggende niveauer over. |
| 10026 | Én eller flere Widget-annoteringer mangler en /StructParent-indgang. ISO 14289-1 §7.18.4 kræver, at Widget-annoteringer er indlejret i et Form-strukturmærke; uden /StructParent kan widgetten slet ikke nås fra strukturtræet. Detallinjen rapporterer antallet. |
| 10027 | Én eller flere Widget-annoteringer har en /StructParent-indgang, men værdien opløses ikke gennem StructTreeRoot/ParentTree til et strukturselement med /S = Form. ISO 14289-1 §7.18.4 kræver, at hver Widget-annotering er indlejret i et Form-strukturmærke. Mulige årsager: /ParentTree-indgangen mangler helt, peger på et ikke-StructElem (råt heltal / MCR-ordbog) eller navngiver et ikke-Form-mærke. |
| 10028 | Én eller flere ikke-symboliske TrueType-skrifttyper har /Encoding (eller en Encoding-ordbogs /BaseEncoding), som ikke er MacRomanEncoding eller WinAnsiEncoding. ISO 14289-1 §7.21.6 begrænser ikke-symbolisk TrueType-kodning til disse to foruddefinerede navne. |
| 10029 | Én eller flere symboliske TrueType-skrifttyper bærer en /Encoding-indgang i skrifttypeordbogen. ISO 14289-1 §7.21.6 fjerde afsnit forbyder det — symbolisk TrueType-kodning må kun udtrykkes gennem skriftprogrammets cmap-tabel. |
| 10030 | Én eller flere L (liste)-strukturselementer mangler attributten ListNumbering. ISO 14289-1 §7.6 kræver, at hvert L-mærke erklærer sin nummereringsstil via denne attribut. Gyldige værdier er None, Disc, Circle, Square, Decimal, UpperRoman, LowerRoman, UpperAlpha og LowerAlpha (ISO 32000-1 tabel 347). |
| 10031 | Én eller flere Link-annoteringer bærer en URI-handlingsordbog, hvis /IsMap-indgang er true. ISO 14289-1 §7.18.5 forbyder /IsMap = true på en URI-handling, medmindre tilsvarende funktionalitet tilbydes andre steder i indholdet uden en /IsMap-nøgle. Forfattere med et legitimt IsMap-anvendelsestilfælde bør selv undertrykke denne diagnostik. |
| 10032 | Én eller flere Note-strukturselementer mangler /ID-indgangen. ISO 14289-1 §7.9 kræver, at hvert Note-mærke erklærer et unikt /ID, så krydsreferencer kan lande på et stabilt mål. |
| 10033 | To eller flere Note-strukturselementer deler samme /ID-værdi. Detallinjen rapporterer antallet af fundne dubletpar. ISO 14289-1 §7.9 kræver, at Note-id'er er unikke i dokumentet. |
| 10034 | Én eller flere ikke-symboliske TrueType-programmer (FontDescriptor med Symbolic-flaget ryddet, FontFile2-stream til stede) indlejrer en cmap-tabel, hvis eneste undertabel er den symboliske (3,0) Microsoft-indgang. ISO 14289-1 §7.21.6 første afsnit kræver mindst én ikke-symbolisk cmap-undertabel, så programmet kan rendere de kodepunkter, som dets /Encoding deklarerer. |
| 10035 | Én eller flere ikke-symboliske TrueType-skrifttyper erklærer en /Encoding med et /Differences-array, der indeholder glyfnavne, som ikke er medlemmer af Adobe Glyph List 2.0. .notdef er hvidlistet, fordi specifikationen implicit tillader det. ISO 14289-1 §7.21.6 tredje afsnit kræver, at hver Differences-indgang lander i AGL. |
| 10036 | Én eller flere simple TrueType-skriftbredder afviger fra de tilsvarende målinger i det indlejrede skriftprogram med mere end en tusindedel af en em. ISO 14289-1 §7.21.5 kræver, at /Widths-arrayet stemmer med de indlejrede glyfmålinger. |
| 10037 | Én eller flere CIDFontType2-bredder afviger fra de tilsvarende målinger i det indlejrede TrueType-program med mere end en tusindedel af en em. ISO 14289-1 §7.21.5 kræver, at /W-arrayet stemmer med de indlejrede glyfmålinger. |
| 10038 | En Type 1-skrifttypedescriptor /CharSet udelader ét eller flere glyfnavne, der findes i det indlejrede skriftprogram. ISO 14289-1 §7.21.4.2 kræver, at indgangen optæller hver indlejret glyf. |
| 10039 | En CID-skrifttypedescriptor /CIDSet udelader ét eller flere CID'er, der afbildes til glyffer i det indlejrede skriftprogram. ISO 14289-1 §7.21.4.2 kræver, at bitsættet identificerer hvert indlejret CID. |
| 10040 | Et Form XObject med tekst kaldes fra sideindhold uden for markeret indhold. ISO 14289-1 §7.20 kræver, at Form XObject-indhold indarbejdes i strukturselementer. |
| 10041 | Én eller flere tekstvisende operander opløses til .notdef-glyffen. ISO 14289-1 §7.21.8 forbyder referencer til .notdef uanset tekstrenderingstilstand. |
| 10042 | Én eller flere medieklipdataordbøger (identificeret ved /S /MCD, eventuelt /Type /MediaClip) mangler den påkrævede /CT-indgang for indholdstype. ISO 14289-1 §7.18.6 ophøjer denne valgfrie ISO 32000-1 tabel 274-nøgle til påkrævet. |
| 10043 | Én eller flere medieklipdataordbøger mangler det påkrævede /Alt-array (sprogstreng + alternativtekst-par). ISO 14289-1 §7.18.6 ophøjer denne valgfrie ISO 32000-1 tabel 274-nøgle til påkrævet, så hjælpeteknologi kan annoncere en beskrivelse for indlejret multimedie. |
| 10044 | Én eller flere strukturtræknuder bærer mere end ét direkte H (generisk overskrift)-barn. ISO 14289-1 §7.4.4 forbyder udtrykkeligt dette — opdel afsnittet, eller erstat H-mærkerne med nummererede H1..H6-niveauer. |
Bemærkninger
PDF/A-testen er beregnet som en hurtig selvtjek før levering. Den fanger de dokumentniveau-problemer, der diskvalificerer en fil fuldstændigt (forkert PDF-version, manglende OutputIntent, manglende strukturtræ på A-niveauet, kryptering, lag i PDF/A-1). Den gennemgår ikke hver enkelt operator i indholdsstreamen og verificerer ikke skrifttypeindlejring eller farverumsreferencer for hvert malet objekt — de valideringer kræver en dedikeret PDF/A-validator (såsom veraPDF). Brug denne funktion som en første kontrol og som en regressionsport i byggepipelines. Brug CreatePreflightReport eller SavePreflightReport, når du ønsker, at biblioteket skal formatere problemlisterne til en genbrugelig tekstrapport. Brug CreatePreflightReportEx eller SavePreflightReportEx til rapportoutput i tekst, JSON, HTML eller CSV, eller se Preflight Reports for den komplette rapportarbejdsgangCompanion-API'en
GetPDFUADiagnostics udfører tilsvarende kontroller for PDF/UA-1 (ISO 14289-1) på det dokument i hukommelsen, der bygges lige nu, frem for på en ekstern filNår du producerer PDF/A-output med dette bibliotek, skal du kalde
SetPDFAMode, før du tilføjer indhold. Vagten på genereringssiden i SetPDFAMode blokerer de operationer, som den valgte del forbyder, så et dokument bygget på den måde normalt består CheckFileCompliance automatisk
Eksempel
// 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 også
Preflight Reports, CreatePreflightReport, CreatePreflightReportEx, SavePreflightReport, SavePreflightReportEx, ComparePreflightReports, SetPDFAMode, GetPDFUADiagnostics, GetStringListCount, GetStringListItem, SetPDFUAMode
Overholdelsestest 3 auditorer PDF/X (ISO 15930): udgaveidentifikation, output intent, sidegeometri, indlejrede skrifttyper og sættet af forbudte funktioner; for PDF/X-6 validerer den også annoteringsflag og faste udseender, AcroForm- og signaturudseender, XFA- og viewer-genererede udseendeudelukkelser, handlingsplacering, handlingskæder, det tilladte sæt af navngivne handlinger og hver UseBlackPtComp-værdiOverholdelsestest 4 auditorer PDF/VT-3-identifikationsmetadata, dens PDF/X-6-familiebase, DPartRoot- og DPart-grafen, DPM-navne og -værdier, postniveau, siderækkefølge og nøjagtig bladdækning; de sammensatte kontroller deler én parserkørselOverholdelsestest 5 auditorer PDF/R-1-markørplacering, version og kryptering, indirekte objekter af generation nul, begrænsede ordbøger og filtre, sideprogrammer i én enkelt stream, ordnede rasterstriber, billedkodninger, sidedækning og effektiv opløsning; den kan genbruge en delt valideringspipeline-parseOverholdelsestest 6 auditorer PDF/X-fundamentet og PDF/VCR-1 XMP-identifikation, den enlige direkte skabelonrod, deklarerede felter, valgfrit sidevalgsfelt og hver blad-PassThrough-erstatningspladsholder, sidebinding, MCID og afgrænsningsboks; den kan genbruge en delt valideringspipeline-parseOverholdelsestest 7 auditorer PDF/E-1-identifikation og livscyklusmetadata, traileridentifikatorer, tilladt kryptering, output intents og enhedsfarverum, indholdsoperatorer, skrifttyper, annoteringer, formularer, valgfrit indhold, handlinger, referencer til eksterne filer, grafiktilstande og 3D-stream-begrænsninger; den kan genbruge en delt valideringspipeline-parse