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

InputFileNameDen fulde sti til den PDF-fil, der skal valideres. Filen åbnes skrivebeskyttet og ændres ikke.
PasswordAdgangskoden, 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.
ComplianceTestDen 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).
OptionsBitflag, 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

0Filen er i overensstemmelse med den valgte standard
Non-zeroEt StringListID-handle, hvis poster beskriver hver registreret manglende overensstemmelse. Handlet forbliver gyldigt, indtil dokumentet lukkes, eller ReleaseStringList kaldes

PDF/A-problemkoder (ComplianceTest = 1)

00002PDF-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
00003Catalog 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
00005XMP-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.
00006Dokumentet er krypteret. PDF/A forbyder kryptering i alle dele.
00007Kataloget har ingen /OutputIntents-post. Alle PDF/A-dele kræver et output intent, så farverummet for gengivelsen er entydigt defineret.
00011Catalog har ingen /MarkInfo-post. Kræves kun til overensstemmelse på a-niveau (PDF/A-1a, 2a, 3a) — tagged PDF skal erklære sig selv.
00012Catalog 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)

10001XMP-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.
10002Dokumentets 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
10003Catalog-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
10004Catalog har ingen /StructTreeRoot-post. En PDF/UA-1-fil skal indeholde et logisk strukturtræ, der beskriver dokumentets læserækkefølge og semantik.
10005Ordbogen /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.
10006Katalogposten /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.
10007XMP-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".
10008Ordbogen /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.
10009Dokumentets /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.
10010Filen 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.
10011En 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.
10012Der 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
10013En 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.
10016En 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.
10017En 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.
10019En 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.
10020En 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).
10022Der 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
10023En 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
10024Det 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."
10025Et 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
10026En 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.
10027En 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
10028En 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.
10029En 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
10030Et 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)
10031En 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.
10032Et 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
10033To 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
10034Et 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.
10035En 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
10042En 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
10043En 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.
10044En 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