CheckFileCompliance
Efterlevnad, dokumentinspektion
PDF/UA-läsaprofilval
PDF/UA-kontrollerna väljer del 2 när XMP identifierar pdfuaid:part=2 och behåller i övrigt del 1-kontrollerna; de äldre PDF/UA-1-kontroller som beskrivs här anses inte gälla del 2
PDF/UA-2-profilen implementerar kärnkontroller för identifikation, namnrymd, roll och struktur; strukturerade rapporter använder PDF/UA-2 och ISO 14289-2 och redovisar fullCertification=false och overifierad omfattning
Använd CheckFilePDFUACompliance eller RunPDFUAValidationPipelineTask för att tvinga en mål-del och GetPDFUAReadValidationCoverageJSON för att granska förmågesgränser
Beskrivning
Läser en extern PDF-fil och validerar den mot en vald ISO-efterlevnadsstandard. Returvärdet är antingen noll (filen klarar det valda testet rent) eller ett icke-noll StringListID-handtag som listar vartje upptäckt problem. Varje post i listan är en kort kod, ett kolon och ett mänskligt läsbart meddelande — exakt samma kodformat som GetPDFUADiagnostics använder. Uppräkna resultatet med GetStringListCount och GetStringListItemPDF/A-testet täcker alla sex efterlevnadslägen (PDF/A-1a, PDF/A-1b, PDF/A-2a, PDF/A-2b, PDF/A-3a, PDF/A-3b) och läser XMP-posterna
pdfaid:part/pdfaid:conformance för att avgöra vilken regeluppsättning som ska tillämpasPDF/UA-1-testet (tillagt i v3.56.0) kontrollerar en extern PDF mot ISO 14289-1 och avger diagnostikkoder i intervallet
10xxx, så att de förblir tydligt åtskilda från PDF/A-koderna 00xxx
Syntax
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);
Parametrar
| InputFileName | Fullständig sökväg till PDF-filen som ska valideras. Filen öppnas skrivskyddat och ändras inte. |
|---|---|
| Password | Lösenord som används för att öppna filen. Skicka en tom sträng för okrypterade dokument. Observera att ett krypterat dokument underkänner PDF/A-testet (kod 00006) oavsett om rätt lösenord anges — PDF/A förbjuder kryptering. |
| ComplianceTest | Standarden som kontrollen ska göras mot. 1 — PDF/A (ISO 19005-1/-2/-3, alla sex efterlevnadsnivåer). 2 — PDF/UA-1 (ISO 14289-1:2014, tillgänglig PDF). 3 — PDF/X (ISO 15930, inklusive PDF/X-6-familjen). 4 — PDF/VT-3 (ISO 16612-3:2020 över en PDF/X-6-familjebas). 5 — PDF/R-1, begränsat rasterutbyte. 6 — PDF/VCR-1, ersättningsmallar för variabelt innehåll. 7 — PDF/E-1, utbyte av tekniska dokument. |
| Options | Bitflaggor som ändrar testet. 0 — Standard: rapportera vartje problem som påträffas i dokumentet. 1 — Stanna efter det första problemet och returnera omedelbart. Användbart när anroparen bara behöver en godkänd/underkänd-signal. |
Returvärden
| 0 | Filen överensstämmer med den valda standarden. |
|---|---|
| Icke-noll | Ett StringListID-handtag vars poster beskriver varje upptäckt avvikelse. Handtaget förblir giltigt tills dokumentet stängs eller ReleaseStringList anropas. |
PDF/A-problemkoder (ComplianceTest = 1)
| 00002 | PDF-versionen överskrider det högsta värde som efterlevnadsnivån tillåter (PDF/A-1 stannar vid 1.4; PDF/A-2 och PDF/A-3 vid 1.7). Detaljraden anger den felande versionen och det tillåtna maxvärdet. |
|---|---|
| 00003 | Katalogen innehåller /OCProperties (valfritt innehåll / lager), vilket PDF/A-1 förbjuder. PDF/A-2 och PDF/A-3 tillåter lager och utlöser inte denna kontroll. |
| 00005 | Paret XMP pdfaid:part+pdfaid:conformance saknas, är felformat eller innehåller ett värde utanför den giltiga uppsättningen 1A, 1B, 2A, 2B, 3A, 3B. Biblioteket kan inte avgöra vilken regeluppsättning som ska tillämpas, så detta rapporteras som ett fatalt problem oavsett Options. |
| 00006 | Dokumentet är krypterat. PDF/A förbjuder kryptering i alla delar. |
| 00007 | Katalogen saknar posten /OutputIntents. Alla PDF/A-delar kräver en OutputIntent, så att renderingsfärgrymden är entydigt definierad. |
| 00011 | Katalogen saknar posten /MarkInfo. Krävs endast för efterlevnad på a-nivå (PDF/A-1a, 2a, 3a) — taggad PDF måste deklarera sig själv. |
| 00012 | Katalogen saknar posten /StructTreeRoot. Krävs endast för efterlevnad på a-nivå. Ett taggat PDF-dokument måste ha ett logiskt strukturträd. |
PDF/UA-1-problemkoder (ComplianceTest = 2)
| 10001 | XMP-metadataströmmen innehåller inte pdfuaid:part, eller värdet är inte 1. ISO 14289-1 §5 kräver att en regelkonform fil identifierar sig via denna egenskap; ISO 14289-1 §6.2 förbjuder att rapportera efterlevnad utan den. |
|---|---|
| 10002 | Dokumentkatalogen saknar en /Metadata-ström. Ett PDF/UA-1-efterlevnadsanspråk registreras i denna ström; utan den kan filen inte utge sig vara tillgänglig. |
| 10003 | Katalogens doktionär /MarkInfo saknas, eller är /Marked inte true. ISO 14289-1 §7.1 kräver att varje regelkonform fil deklarerar sig som taggad, så att hjälpmedel kan förlita sig på strukturträdet. |
| 10004 | Katalogen saknar posten /StructTreeRoot. En PDF/UA-1-fil måste innehålla ett logiskt strukturträd som beskriver dokumentets läsordning och semantik. |
| 10005 | Doktionären /ViewerPreferences saknas, eller är posten /DisplayDocTitle inte true. ISO 14289-1 §7.1 kräver att regelkonforma visare visar dokumenttiteln i sitt fönster i stället för filnamnet. |
| 10006 | Katalogens post /Lang saknas eller är tom. ISO 14289-1 §7.2 (med hänvisning till ISO 32000-1 §14.9.2) kräver att varje regelkonform fil deklarerar sitt naturliga språk, så att skärmläsare väljer rätt röst och uttalsregler. |
| 10007 | XMP-metadataströmmen bär inte på en icke-tom Dublin Core-dc:title. ISO 14289-1 §7.1 kräver "a dc:title entry which clearly identifies the document". |
| 10008 | Doktionären /MarkInfo har /Suspects satt till true. ISO 14289-1 §7.1: filer som gör anspråk på PDF/UA-efterlevnad måste ha ett Suspects-värde på false — ett värde true markerar taggningen som känd för att innehålla fel. |
| 10009 | Dokumentets /RoleMap mappar om en eller flera standardstrukturtyper. ISO 14289-1 §7.1: standardtaggar som definieras i ISO 32000-1 §14.8.4 (P, H1..H6, Figure, Table o.s.v.) ska inte mappas om. Detaljraden anger den första standardtagg som mappades om. |
| 10010 | Filen är krypterad, men bit 10 av krypteringens behörighetsnyckel /P (mask 512, "Extract for accessibility") är inte satt. ISO 14289-1 §7.16 kräver att varje krypterad regelkonform fil tillåter hjälpmedelsanpassad extraktion, så att hjälpmedel kan nå innehållet. |
| 10011 | Ett dynamiskt XFA-formulär upptäcktes: XFA XDP-paketet innehåller <dynamicRender>required</dynamicRender>. ISO 14289-1 §7.15 förbjuder dynamiska XFA-formulär i regelkonforma filer; statisk XFA är tillåten. |
| 10012 | En Reference XObject (Form XObject som bär posten /Ref) upptäcktes. ISO 14289-1 §7.20 förbjuder referens-XObjects, eftersom de låter en PDF bädda in en annan via referens utan att exponera det refererade innehållet för hjälpmedel. |
| 10013 | En eller flera TrapNet-anteckningar upptäcktes. ISO 14289-1 §7.18.2 förbjuder uttryckligen TrapNet i regelkonforma filer. Detaljraden rapporterar hur många anteckningar som hittades. |
| 10014 | En eller flera sidor bär anteckningar men sätter inte /Tabs /S i sin sidordbok. ISO 14289-1 §7.18.3 kräver att tabbordningen på sådana sidor följer strukturträdet, vilket signaleras av /Tabs /S. Detaljraden rapporterar antalet felande sidor. |
| 10015 | En eller flera Link-anteckningar saknar en icke-tom alternativbeskrivning i /Contents. ISO 14289-1 §7.18.5 kräver att varje Link-anteckning bär en tillgänglig beskrivning, så att skärmläsare kan meddela länkmålet. Detaljraden rapporterar antalet felande Link-anteckningar. |
| 10016 | En eller flera FileSpec-doktionärer för inbäddade filer saknar filnamnsnyckeln /F. ISO 14289-1 §7.11 kräver att varje inbäddad fils FileSpec bär både /F och /UF. |
| 10017 | En eller flera FileSpec-doktionärer för inbäddade filer saknar Unicode-filnamnsnyckeln /UF. ISO 14289-1 §7.11 kräver att varje inbäddad fils FileSpec bär både /F och /UF. |
| 10018 | En eller flera konfigurationsdoktionärer för valfritt innehåll saknar en icke-tom textsträng /Name. ISO 14289-1 §7.10 kräver att varje OCG-konfigurationsdoktionär (standardposten D plus varje doktionär i OCProperties/Configs) bär en icke-tom /Name. |
| 10019 | En eller flera konfigurationsdoktionärer för valfritt innehåll innehåller den förbjudna nyckeln /AS. ISO 14289-1 §7.10 förbjuder uttryckligen /AS i varje OCG-konfigurationsdoktionär, för att förhindra automatiska tillståndsjusteringar som drivs av användningsinformation. |
| 10020 | Ett eller flera teckensnitt utanför Standard 14 som dokumentet refererar till bäddar inte in sitt teckensnittsprogram (ingen post FontFile, FontFile2 eller FontFile3 i FontDescriptor). ISO 14289-1 §7.21.4.1 kräver att varje teckensnitt som används för rendering bäddar in sitt program. Type 3-teckensnitt hoppar över denna kontroll, eftersom deras glyfer är inline-CharProcs. |
| 10021 | En eller flera CIDFontType2-efterled saknar posten /CIDToGIDMap. ISO 14289-1 §7.21.3.2 kräver att varje inbäddad Type 2 CIDFont bär /CIDToGIDMap (antingen som en ström som mappar CIDs till glyfindex, eller som namnet Identity). |
| 10022 | Ett eller flera Standard 14-teckensnitt (Helvetica, Times, Courier, Symbol, ZapfDingbats och deras feta / kursiva varianter) refereras utan inbäddat teckensnittsprogram. ISO 14289-1 §7.21.4 NOTE 5 gör klart att det inte finns något undantag från inbäddning för de 14 standard Type 1-teckensnitten. |
| 10023 | Ett eller flera teckensnitt saknar en /ToUnicode-CMap och matchar inte undantagslistan i §7.21.7. Undantagslistan täcker de fördefinierade MacRomanEncoding / MacExpertEncoding / WinAnsiEncoding, Type 0-teckensnitt vars underordnade CIDFont använder Adobes teckenkollektioner GB1 / CNS1 / Japan1 / Korea1, samt icke-symboliska TrueType-teckensnitt. |
| 10024 | Det första rubrikelementet i dokumentordning är inte H1 (eller det starkt strukturerade H). ISO 14289-1 §7.4.2: "If any heading tags are used, H1 shall be the first." |
| 10025 | Ett eller flera hopp i rubriknivå upptäcktes i dokumentordning — t.ex. en H1 som omedelbart följs av en H3, vilket hoppar över H2. ISO 14289-1 §7.4.2 kräver att fallande rubriksekvenser följer strikt numerisk ordning utan att hoppa över mellanliggande nivåer. |
| 10026 | En eller flera Widget-anteckningar saknar posten /StructParent. ISO 14289-1 §7.18.4 kräver att Widget-anteckningar kapslas inom en Form-strukturtagg; utan /StructParent kan widgeten omöjligt nås från strukturträdet. Detaljraden rapporterar antalet. |
| 10027 | En eller flera Widget-anteckningar har en post /StructParent, men värdet löser sig inte via StructTreeRoot/ParentTree till ett strukturelement med /S = Form. ISO 14289-1 §7.18.4 kräver att varje Widget-anteckning kapslas inom en Form-strukturtagg. Möjliga orsaker: posten /ParentTree saknas helt, pekar på ett icke-StructElem (rått heltal / MCR-doktionär), eller namnger en tagg som inte är Form. |
| 10028 | Ett eller flera icke-symboliska TrueType-teckensnitt har /Encoding (eller en Encoding-doktionärs /BaseEncoding) som inte är MacRomanEncoding eller WinAnsiEncoding. ISO 14289-1 §7.21.6 begränsar icke-symbolisk TrueType-kodning till dessa två fördefinierade namn. |
| 10029 | Ett eller flera symboliska TrueType-teckensnitt bär en post /Encoding i teckensnittsdoktionären. ISO 14289-1 §7.21.6 fjärde stycke förbjuder detta — symbolisk TrueType-kodning måste uttryckas endast via det inbäddade teckensnittsprogrammets cmap-tabell. |
| 10030 | Ett eller flera L (lista)-strukturelement saknar attributet ListNumbering. ISO 14289-1 §7.6 kräver att varje L-tagg deklarerar sin numreringsstil via detta attribut. Giltiga värden är None, Disc, Circle, Square, Decimal, UpperRoman, LowerRoman, UpperAlpha och LowerAlpha (ISO 32000-1 Table 347). |
| 10031 | En eller flera Link-anteckningar bär en URI-åtgärdsdoktionär vars post /IsMap är true. ISO 14289-1 §7.18.5 förbjuder /IsMap = true på en URI-åtgärd, såvida inte motsvarande funktionalitet tillhandahålls någon annanstans i innehållet utan en nyckel /IsMap. Upphovspersoner med ett legitimt IsMap-användningsfall bör undertrycka denna diagnos på egen hand. |
| 10032 | Ett eller flera Note-strukturelement saknar posten /ID. ISO 14289-1 §7.9 kräver att varje Note-tagg deklarerar ett unikt /ID, så att korsreferenser kan landa på ett stabilt mål. |
| 10033 | Två eller flera Note-strukturelement delar samma /ID-värde. Detaljraden rapporterar antalet upptäckta dubblettpar. ISO 14289-1 §7.9 kräver att Note-ID:n är unika inom dokumentet. |
| 10034 | Ett eller flera icke-symboliska TrueType-program (FontDescriptor med flaggan Symbolic rensad, FontFile2-ström finns) bäddar in en cmap-tabell vars enda undertabell är den symboliska (3,0) Microsoft-posten. ISO 14289-1 §7.21.6 första stycke kräver minst en icke-symbolisk cmap-undertabell, så att programmet kan rendera de kodpunkter som dess /Encoding deklarerar. |
| 10035 | Ett eller flera icke-symboliska TrueType-teckensnitt deklarerar en /Encoding med en /Differences-matris som innehåller glyfnamn som inte ingår i Adobe Glyph List 2.0. .notdef är vitlistat, eftersom specen implicit tillåter det. ISO 14289-1 §7.21.6 tredje stycke kräver att varje Differences-post hamnar i AGL. |
| 10036 | En eller flera enkla TrueType-teckensnitts bredder avviker från motsvarande metrik i det inbäddade teckensnittsprogrammet med mer än en tusendels em. ISO 14289-1 §7.21.5 kräver att /Widths-matrisen stämmer med de inbäddade glyfmetrikerna. |
| 10037 | En eller flera CIDFontType2-bredder avviker från motsvarande metrik i det inbäddade TrueType-programmet med mer än en tusendels em. ISO 14289-1 §7.21.5 kräver att /W-matrisen stämmer med de inbäddade glyfmetrikerna. |
| 10038 | En Type 1-teckensnittsdeskriptors /CharSet utelämnar ett eller flera glyfnamn som finns i dess inbäddade teckensnittsprogram. ISO 14289-1 §7.21.4.2 kräver att posten räknar upp varje inbäddad glyf. |
| 10039 | En CID-teckensnittsdeskriptors /CIDSet utelämnar en eller flera CIDs som mappar till glyfer i dess inbäddade teckensnittsprogram. ISO 14289-1 §7.21.4.2 kräver att bitmängden identifierar varje inbäddad CID. |
| 10040 | En Form XObject som innehåller text anropas från sidinnehåll utanför markerat innehåll. ISO 14289-1 §7.20 kräver att Form XObject-innehåll inkorporeras i strukturelement. |
| 10041 | En eller flera textvisande operander löser sig till glyfen .notdef. ISO 14289-1 §7.21.8 förbjuder referenser till .notdef oavsett textrenderingsläge. |
| 10042 | En eller flera doktionärer för mediaklipp (identifierade av /S /MCD, valfritt /Type /MediaClip) saknar den obligatoriska posten /CT för innehållstyp. ISO 14289-1 §7.18.6 höjer denna valfria nyckel i ISO 32000-1 Table 274 till obligatorisk. |
| 10043 | En eller flera doktionärer för mediaklipp saknar den obligatoriska /Alt-matrisen (par av språksträng + alternativtext). ISO 14289-1 §7.18.6 höjer denna valfria nyckel i ISO 32000-1 Table 274 till obligatorisk, så att hjälpmedel kan meddela en beskrivning för inbäddad multimedia. |
| 10044 | En eller flera noder i strukturträdet bär mer än ett direkt H-barn (generisk rubrik). ISO 14289-1 §7.4.4 förbjuder uttryckligen detta — dela avsnittet, eller ersätt H-taggarna med numrerade nivåer H1..H6. |
Anmärkningar
PDF/A-testet är avsett som en snabb självkontroll före leverans. Det fångar de problem på dokumentnivå som underkänner en fil direkt (fel PDF-version, saknad OutputIntent, saknat strukturträd på A-nivå, kryptering, lager i PDF/A-1). Det går inte igenom varje innehållsströmsoperator och verifierar varken teckensnittsinbäddning eller färgrymdsreferenser för varje ritat objekt — dessa valideringar kräver en särskild PDF/A-validare (såsom veraPDF). Använd funktionen som en kontroll i första linjen och som en regressionsgrind i byggpipelines. Använd CreatePreflightReport eller SavePreflightReport när du vill att biblioteket ska formatera problemlistorna till en återanvändbar textrapport. Använd CreatePreflightReportEx eller SavePreflightReportEx för rapportutdata som text, JSON, HTML eller CSV, eller se Preflight Reports för det fullständiga rapportflödetSyster-API:t
GetPDFUADiagnostics utför motsvarande kontroller för PDF/UA (ISO 14289-1) på det minnesdokument som för närvarande byggs, i stället för på en extern filNär du producerar PDF/A-utdata med detta bibliotek anropar du
SetPDFAMode innan innehåll läggs till. Bevakningen på genereringssidan i SetPDFAMode blockerar de operationer som den valda delen förbjuder, så ett dokument som byggs på det sättet klarar normalt CheckFileCompliance automatiskt
Exempel
// 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 även
Preflight Reports, CreatePreflightReport, CreatePreflightReportEx, SavePreflightReport, SavePreflightReportEx, ComparePreflightReports, SetPDFAMode, GetPDFUADiagnostics, GetStringListCount, GetStringListItem, SetPDFUAMode
Efterlevnadstest 3 granskar PDF/X (ISO 15930): utgåvoidentifikation, OutputIntent, sidgeometri, inbäddade teckensnitt och uppsättningen förbjudna funktioner; för PDF/X-6 validerar det också anteckningsflaggor och fixerade utseenden, AcroForm- och signaturutseenden, XFA- och visargenererade utseendeundantag, åtgärdsplacering, åtgärdskedjor, den tillåtna uppsättningen namngivna åtgärder och vartje UseBlackPtComp-värde
Efterlevnadstest 4 granskar PDF/VT-3-identifikationsmetadata, dess PDF/X-6-familjebas, DPartRoot- och DPart-grafen, DPM-namn och -värden, postnivå, sidordning och exakt lövtäckning; de sammansatta kontrollerna delar ett parserpass
Efterlevnadstest 5 granskar PDF/R-1-markörplacering, version och kryptering, indirekta objekt av generation noll, begränsade dictionaries och filter, sidprogram i en enda ström, ordnade rasterremsor, bildkodningar, sidtäckning och effektiv upplösning; det kan återanvända ett delat valideringspipeline-pass
Efterlevnadstest 6 granskar PDF/X-grunden och PDF/VCR-1 XMP-identifiering, den enda direkta mallroten, deklarerade fält, valfritt sidvalsfält och varje löv-PassThrough-ersättningsplatshållare, sidbindning, MCID och begränsningsruta; det kan återanvända ett delat valideringspipeline-pass
Efterlevnadstest 7 granskar PDF/E-1-identifiering och livscykelmetadata, traileridentifierare, tillåten kryptering, utdataintent och enhetsfärgrymder, innehållsoperatorer, teckensnitt, annoteringar, formulär, valfritt innehåll, åtgärder, referenser till externa filer, grafiktillstånd och 3D-strömbegränsningar; det kan återanvända ett delat valideringspipeline-pass