CheckFileComplianceA
Overensstemmelse, dokumentinspektion
Beskrivelse
Det afsluttende A angiver ANSI-indgangspunktet (char) i DLL'en; ActiveX/COM-overfladen eksponerer kun Unicode-formen. Adfærden er identisk med CheckFileCompliance, og strengargumenter fortolkes ud fra den aktuelle kodetabel i SetAnsiMode
Læser en ekstern PDF-fil og validerer den i forhold til en valgt ISO-overensstemmelsesstandard. Den returnerede værdi er enten nul (filen består den valgte test uden problemer) eller et StringListID-håndtag forskelligt fra nul, som viser alle registrerede problemer. Hver post på listen er en kort kode, et kolon og en menneskeligt læsbar meddelelse — præcis det samme kodeformat som det, der bruges af GetPDFUADiagnostics. Optæl resultatet med GetStringListCount og GetStringListItem.
PDF/A-testen dækker alle seks overensstemmelsestilstande (PDF/A-1a, PDF/A-1b, PDF/A-2a, PDF/A-2b, PDF/A-3a, PDF/A-3b) og læser XMP-posterne pdfaid:part/pdfaid:conformance for at afgøre, hvilket regelsæt der skal anvendes.
PDF/UA-1-testen (tilføjet i v3.56.0) kontrollerer en ekstern PDF mod ISO 14289-1 og udsender diagnosticeringskoder i området 10xxx, så de forbliver visuelt adskilt fra PDF/A-koderne 00xxx.
Syntaks
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);
Parametre
| InputFileName | Den fulde sti til den PDF-fil, der skal valideres. Filen åbnes skrivebeskyttet og ændres ikke. |
|---|---|
| Password | Adgangskoden, der bruges til at åbne filen. Angiv en tom streng for ukrypterede dokumenter. Bemærk, at et krypteret dokument ikke består PDF/A-testen (kode 00006), uanset om den korrekte adgangskode angives – PDF/A forbyder kryptering. |
| ComplianceTest | Den standard, der skal kontrolleres imod. 1 — PDF/A (ISO 19005-1/-2/-3, alle seks overensstemmelsesniveauer). 2 — PDF/UA-1 (ISO 14289-1:2014, tilgængelig PDF). |
| Options | Bitflag, der ændrer testen. 0 — Standard: rapportér alle problemer, der findes i dokumentet. 1 — Stop efter det første problem, og returnér med det samme. Nyttigt, når kalderen kun behøver et bestået/ikke bestået-signal. |
Returværdier
| 0 | Filen er i overensstemmelse med den valgte standard |
|---|---|
| Non-zero | Et StringListID-handle, hvis poster beskriver hver registreret manglende overensstemmelse. Handlet forbliver gyldigt, indtil dokumentet lukkes, eller ReleaseStringList kaldes |
PDF/A-problemkoder (ComplianceTest = 1)
| 00002 | PDF-versionen overstiger det maksimum, som overensstemmelsesniveauet tillader (PDF/A-1 er begrænset til 1.4; PDF/A-2 og PDF/A-3 er begrænset til 1.7). Detaljelinjen angiver den problematiske version og det tilladte maksimum |
|---|---|
| 00003 | Catalog indeholder /OCProperties (valgfrit indhold/lag), som er forbudt i PDF/A-1. PDF/A-2 og PDF/A-3 tillader lag og udløser ikke denne kontrol |
| 00005 | XMP-parret pdfaid:part+pdfaid:conformance mangler, er forkert udformet eller indeholder en værdi uden for det tilladte sæt 1A, 1B, 2A, 2B, 3A, 3B. Biblioteket kan ikke afgøre, hvilket regelsæt der skal anvendes, så dette rapporteres som et kritisk problem uanset Options. |
| 00006 | Dokumentet er krypteret. PDF/A forbyder kryptering i alle dele. |
| 00007 | Kataloget har ingen /OutputIntents-post. Alle PDF/A-dele kræver et output intent, så farverummet for gengivelsen er entydigt defineret. |
| 00011 | Catalog har ingen /MarkInfo-post. Kræves kun til overensstemmelse på a-niveau (PDF/A-1a, 2a, 3a) — tagged PDF skal erklære sig selv. |
| 00012 | Catalog har ingen /StructTreeRoot-post. Kræves kun til overensstemmelse på a-niveau. Et tagged-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 overensstemmende fil identificerer sig selv via denne egenskab; ISO 14289-1 §6.2 forbyder angivelse af overensstemmelse uden den. |
|---|---|
| 10002 | Dokumentets Catalog har ingen /Metadata-stream. En PDF/UA-1-overensstemmelseserklæring registreres i denne stream; uden den kan filen ikke erklære sig som tilgængelig |
| 10003 | Catalog-ordbogen /MarkInfo mangler, eller /Marked er ikke true. ISO 14289-1 §7.1 kræver, at enhver overensstemmende fil erklærer sig som tagget, så hjælpeteknologi kan stole på strukturtræet |
| 10004 | Catalog har ingen /StructTreeRoot-post. En PDF/UA-1-fil skal indeholde et logisk strukturtræ, der beskriver dokumentets læserækkefølge og semantik. |
| 10005 | Ordbogen /ViewerPreferences mangler, eller dens /DisplayDocTitle-post er ikke true. ISO 14289-1 §7.1 kræver, at kompatible læsere viser dokumenttitlen i deres vinduesramme i stedet for filnavnet. |
| 10006 | Katalogposten /Lang mangler eller er tom. ISO 14289-1 §7.2 (med henvisning til ISO 32000-1 §14.9.2) kræver, at alle overensstemmende filer angiver deres naturlige sprog, så skærmlæsere vælger den korrekte stemme og de korrekte udtaleregler. |
| 10007 | XMP-metadatastrømmen indeholder ikke en ikke-tom Dublin Core-dc:title. ISO 14289-1 §7.1 kræver "en dc:title-post, der tydeligt identificerer dokumentet". |
| 10008 | Ordbogen /MarkInfo har /Suspects angivet 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 taggingen som kendt for at indeholde fejl. |
| 10009 | Dokumentets /RoleMap omfortolker en eller flere standardstrukturtyper. ISO 14289-1 §7.1: Standardtags defineret i ISO 32000-1 §14.8.4 (P, H1..H6, Figure, Table osv.) må ikke omfortolkes. Detaljelinjen navngiver det første standardtag, der blev omfortolket. |
| 10010 | Filen er krypteret, men bit 10 i krypteringens /P-tilladelsesnøgle (maske 512, "Udtræk til tilgængelighed") er ikke angivet. ISO 14289-1 §7.16 kræver, at enhver krypteret, overensstemmende fil tillader udtræk til tilgængelighed, så hjælpeteknologi kan tilgå indholdet. |
| 10011 | En dynamisk XFA-formular blev registreret: XFA XDP-pakken indeholder <dynamicRender>required</dynamicRender>. ISO 14289-1 §7.15 forbyder dynamiske XFA-formularer i filer, der opfylder standarden; statisk XFA er tilladt. |
| 10012 | Der blev fundet et Reference XObject (et Form XObject med en /Ref-post). ISO 14289-1 §7.20 forbyder reference-XObjects, fordi de gør det muligt for én PDF at integrere en anden via en reference uden at gøre det refererede indhold tilgængeligt for hjælpeteknologi |
| 10013 | En eller flere TrapNet-annotationer blev registreret. ISO 14289-1 §7.18.2 forbyder udtrykkeligt TrapNet i filer, der opfylder standarden. Detaljelinjen angiver, hvor mange annotationer der blev fundet. |
| 10014 | Én eller flere sider indeholder anmærkninger, men angiver 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 med /Tabs /S. Detaljelinjen rapporterer antallet af berørte sider. |
| 10015 | Én eller flere Link-anmærkninger mangler en ikke-tom alternativ beskrivelse i /Contents. ISO 14289-1 §7.18.5 kræver, at hver Link-anmærkning indeholder en tilgængelig beskrivelse, så skærmlæsere kan annoncere linkmålet. Detaljelinjen rapporterer antallet af berørte Link-anmærkninger. |
| 10016 | En eller flere FileSpec-ordbøger for integrerede filer mangler filnavnenøglen /F. ISO 14289-1 §7.11 kræver, at hver FileSpec for en integreret fil indeholder både /F og /UF. |
| 10017 | En eller flere FileSpec-ordbøger for integrerede filer mangler Unicode-filnavnenøglen /UF. ISO 14289-1 §7.11 kræver, at hver FileSpec for en integreret fil indeholder 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 (standardposten D samt hver ordbog i OCProperties/Configs) indeholder en ikke-tom /Name. |
| 10019 | En eller flere konfigurationsordbøger for valgfrit indhold indeholder den forbudte nøgle /AS. ISO 14289-1 §7.10 forbyder udtrykkeligt /AS i enhver OCG-konfigurationsordbog for at forhindre automatiske tilstandsjusteringer, der styres af brugsoplysninger. |
| 10020 | En eller flere ikke-Standard-14-skrifttyper, som dokumentet refererer til, integrerer ikke deres skrifttypeprogram (ingen post af typen FontFile, FontFile2 eller FontFile3 i FontDescriptor). ISO 14289-1 §7.21.4.1 kræver, at programmet for enhver skrifttype, der bruges til gengivelse, integreres. Type 3-skrifttyper springer denne kontrol over, fordi deres glyffer er indlejrede CharProcs |
| 10021 | Én eller flere CIDFontType2-efterkommere mangler posten /CIDToGIDMap. ISO 14289-1 §7.21.3.2 kræver, at hver indlejret Type 2 CIDFont indeholder /CIDToGIDMap (enten som en stream, der tilknytter CID'er til glyfindeks, eller som navnet Identity). |
| 10022 | Der refereres til en eller flere Standard 14-skrifttyper (Helvetica, Times, Courier, Symbol, ZapfDingbats og deres fede/skrå varianter) uden et integreret skrifttypeprogram. ISO 14289-1 §7.21.4 NOTE 5 gør det klart, at der ikke er nogen undtagelse fra integrering for de 14 standard-Type 1-skrifttyper |
| 10023 | En eller flere skrifttyper mangler en /ToUnicode-CMap og matcher ikke undtagelseslisten i §7.21.7. Undtagelseslisten omfatter de foruddefinerede MacRomanEncoding / MacExpertEncoding / WinAnsiEncoding, Type 0-skrifttyper, hvis underordnede CIDFont bruger Adobes tegnsamlinger GB1 / CNS1 / Japan1 / Korea1, samt ikke-symbolske TrueType-skrifttyper |
| 10024 | Det første overskriftselement i dokumentrækkefølge er ikke H1 (eller det strengt strukturerede H). ISO 14289-1 §7.4.2: "Hvis der bruges overskriftstags, skal H1 være det første." |
| 10025 | Et eller flere spring i overskriftsniveauer blev registreret i dokumentrækkefølgen — f.eks. en H1, der umiddelbart efterfølges af en H3, så H2 springes over. ISO 14289-1 §7.4.2 kræver, at faldende overskriftssekvenser følger en streng numerisk rækkefølge uden at springe mellemliggende niveauer over |
| 10026 | En eller flere Widget-annoteringer mangler en /StructParent-post. ISO 14289-1 §7.18.4 kræver, at Widget-annoteringer er indlejret i et Form-strukturmærke; uden /StructParent kan Widget-elementet umuligt nås fra strukturtræet. Detaljelinjen angiver antallet. |
| 10027 | En eller flere Widget-annotationer har en /StructParent-post, men værdien opløses ikke gennem StructTreeRoot/ParentTree til et strukturelement med /S = Form. ISO 14289-1 §7.18.4 kræver, at alle Widget-annotationer indlejres i et Form-struktur-tag. Mulige årsager: Posten /ParentTree mangler helt, peger på et ikke-StructElem (råt heltal / MCR-ordbog) eller navngiver et tag, der ikke er Form |
| 10028 | En eller flere ikke-symbolske TrueType-skrifttyper har /Encoding (eller en Encoding-ordbog's /BaseEncoding), der ikke er MacRomanEncoding eller WinAnsiEncoding. ISO 14289-1 §7.21.6 begrænser kodningen af ikke-symbolske TrueType-skrifttyper til disse to foruddefinerede navne. |
| 10029 | En eller flere symbolske TrueType-skrifttyper indeholder en /Encoding-post i skrifttypeordbogen. ISO 14289-1 §7.21.6, fjerde afsnit, forbyder dette — symbolsk TrueType-kodning må kun udtrykkes gennem den integrerede skrifttypeprogram's cmap-tabel |
| 10030 | Et eller flere L-strukturelementer (lister) mangler attributten ListNumbering. ISO 14289-1 §7.6 kræver, at hvert L-tag angiver sin nummereringstype via denne attribut. Gyldige værdier er None, Disc, Circle, Square, Decimal, UpperRoman, LowerRoman, UpperAlpha og LowerAlpha (ISO 32000-1, tabel 347) |
| 10031 | En eller flere Link-annoteringer indeholder en URI-handlingsordbog, hvis /IsMap-post er true. ISO 14289-1 §7.18.5 forbyder /IsMap = true på en URI-handling, medmindre tilsvarende funktionalitet leveres andetsteds i indholdet uden en /IsMap-nøgle. Forfattere med et legitimt IsMap-brugstilfælde bør selv undertrykke denne diagnostik. |
| 10032 | Et eller flere Note-strukturelementer mangler posten /ID. ISO 14289-1 §7.9 kræver, at hvert Note-tag erklærer et entydigt /ID, så krydsreferencer kan lande på et stabilt mål |
| 10033 | To eller flere Note-strukturelementer deler samme /ID-værdi. Detaljelinjen angiver antallet af fundne dubletpar. ISO 14289-1 §7.9 kræver, at Note-ID'er er entydige i dokumentet |
| 10034 | Et eller flere ikke-symbolske TrueType-programmer (FontDescriptor med flaget Symbolic ryddet, FontFile2-stream til stede) indlejrer en cmap-tabel, hvis eneste undertabel er den symbolske Microsoft-post (3,0). Første afsnit i ISO 14289-1 §7.21.6 kræver mindst én ikke-symbolsk cmap-undertabel, så programmet kan gengive de kodepunkter, der erklæres af dets /Encoding. |
| 10035 | En eller flere ikke-symbolske TrueType-skrifttyper erklærer en /Encoding med et /Differences-array, der indeholder glyfnavne, som ikke findes i Adobe Glyph List 2.0. .notdef er tilladt, fordi specifikationen implicit tillader det. ISO 14289-1 §7.21.6, tredje afsnit, kræver, at hver Differences-post findes i AGL |
| 10042 | En eller flere ordbøger med medieklipdata (identificeret med /S /MCD, eventuelt /Type /MediaClip) mangler den påkrævede indholdstypepost /CT. ISO 14289-1 §7.18.6 gør denne valgfrie nøgle fra ISO 32000-1 tabel 274 obligatorisk |
| 10043 | En eller flere ordbøger med medieklipdata mangler det påkrævede /Alt-array (par af sprogstreng og alternativ tekst). ISO 14289-1 §7.18.6 ophøjer denne valgfrie nøgle fra ISO 32000-1 Table 274 til et krav, så kompenserende teknologi kan annoncere en beskrivelse af integrerede multimedier. |
| 10044 | En eller flere noder i strukturtræet har mere end ét direkte underordnet H-element (generisk overskrift). ISO 14289-1 §7.4.4 forbyder udtrykkeligt dette — opdel afsnittet, eller erstat H-tags med nummererede H1..H6-niveauer |
Bemærkninger
PDF/A-testen er beregnet som en hurtig selvkontrol før levering. Den finder problemer på dokumentniveau, som straks diskvalificerer en fil (forkert PDF-version, manglende OutputIntent, manglende strukturtræ på A-niveau, kryptering, lag i PDF/A-1). Den gennemgår ikke hver operator i indholdsstreamen og kontrollerer heller ikke skrifttypeindlejring eller farverumsreferencer for hvert malet objekt — disse valideringer kræver en dedikeret PDF/A-validator (såsom veraPDF). Brug funktionen som en indledende kontrol og som en regressionskontrol i buildpipelines. Brug CreatePreflightReport eller SavePreflightReport, når biblioteket skal formatere problemlisterne som en genanvendelig tekstrapport. Brug CreatePreflightReportEx eller SavePreflightReportEx til rapportoutput i tekst, JSON, HTML eller CSV, eller se Preflight Reports for hele rapportprocessen.
Det ledsagende API GetPDFUADiagnostics udfører tilsvarende kontroller for PDF/UA-1 (ISO 14289-1) på det dokument i hukommelsen, der aktuelt bygges, i stedet for på en ekstern fil.
Ved oprettelse af PDF/A-output med dette bibliotek skal SetPDFAMode kaldes, før der tilføjes indhold. Genereringskontrollen i SetPDFAMode blokerer de handlinger, som den valgte del forbyder, så et dokument opbygget på denne måde normalt automatisk består CheckFileCompliance.
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