function ValidatePdfUa: TPdfUaValidationResult;
ValidatePdfUa otkriva PDF/UA-1 i PDF/UA-2 iz XMP-a i primenjuje pravila za izabrani profil
pdfuaid:part = 1 i odgovarajućim opisom pdfaExtension:schemas (§5)dc:title unutar XMP paketa (§7.1)StructTreeRoot u katalogu ili negde u datoteci (§7.1) — obavezan kako bi dokument uopšte mogao da nosi označavanje/MarkInfo << /Marked true /Suspects false >> (§7.1)/ViewerPreferences << /DisplayDocTitle true >> (§7.1)/Lang sa jezičkom oznakom BCP 47 (§7.2)/ID niz u trailer-u i odsustvo enkripcijexmp:CreateDate / xmp:ModifyDate (preporučeno za Info/XMP podudarnost)Rezultat je zapis TPdfUaValidationResult:
puc1, puc2, pucNone ili pucUnknownTPdfUaValidationIssues koji sadrži nula ili više vrednosti: pvuaiMissingXmpMetadata, pvuaiMissingPdfUaIdentifier, pvuaiMissingExtensionSchema, pvuaiMissingDcTitle, pvuaiMissingStructTreeRoot, pvuaiMissingMarkInfo, pvuaiSuspectsTrue, pvuaiMissingDisplayDocTitle, pvuaiMissingLang, pvuaiEncryptionPresent, pvuaiMissingTrailerId, pvuaiMissingXmpDates, pvuaiFontNotEmbedded, pvuaiFontMissingToUnicode, pvuaiMissingTabsOrder, pvuaiFigureMissingAlt, pvuaiFormulaMissingAlt, pvuaiNoteMissingId. Runda 1 (v1.66.0) dodaje pvuaiRoleMapMissing (7.1), pvuaiOptionalContentAsKey (7.10), pvuaiXfaPresent (7.15), pvuaiTrapNetAnnotation (7.18.2), pvuaiReferenceXObject (7.20) i pvuaiEncryptionPBitMissing (7.16 — precizna povreda enkripcije koja zamenjuje stari flag za bilo koju enkripciju). Runda 2 (v1.67.0) dodaje pvuaiLinkMissingContents (7.18.5), pvuaiAnnotationMissingContents (7.18.1), pvuaiEmbeddedFileMissingName (7.11), pvuaiMediaClipMissingAlt (7.18.6.2) i pvuaiCidFontMissingCidToGidMap (7.21.3.2). Runda 3 (v1.68.0) dodaje pvuaiUriActionIsMap (7.18.5) i pvuaiHeadingSequenceViolation (7.4.2 — prvo pravilo na nivou stabla strukture; ValidatePdfUaStructureElements sada verifikuje sekvencu numerisanih naslova). Runda 4 (v1.69.0) dodaje pvuaiWidgetOutsideForm (7.18.4 — ugnežđavanje Widget-a u stablu strukture) i pvuaiSubsetMissingCharSet (7.21.4.2). Runda 5 (v1.70.0) dodaje pvuaiSubsetMissingCidSet (7.21.4.2), pvuaiToUnicodeForbiddenValue (7.21.7), pvuaiLangInvalidFormat (7.2) i pvuaiOrderedListMissingListNumbering (7.6 — podiže se od v1.71.0 kada L element deklariše ListNumbering vrednost van skupa iz Tabele 347; odsutan atribut se ne označava). Runda 7 (v1.80.0) dodaje §7.5 provere tabele pvuaiTableStructureInvalid (TH/TD van TR, ili TR/THead/TBody/TFoot van njihovog obaveznog kontejnera), pvuaiTableHeaderMissingScope (TH koji nema ni Scope atribut ni ID, u tabeli u kojoj nijedna ćelija ne koristi Headers povezivanje) i pvuaiTableHeadersUndefinedId (ćelije referenciraju zaglavlja kroz Headers nizove, dok nijedan element strukture u dokumentu ne definiše ID; pojedinačni besmislen unos pored razrešivih se toleriše, usklađeno sa autoritativnim validátorom). v1.81.0 dodaje §7.6 proveru ugnežđavanja lista pvuaiListStructureInvalid (LI van L kontejnera, ili Lbl/LBody van LI stavke; ugnežđene liste i Lbl unutar Note/BibEntry se prihvataju). v1.82.0 dodaje §7.1 provere razrešavanja RoleMap-a pvuaiRoleMapRemapsStandard (unos u RoleMap-u redefiniše standardni tip strukture) i pvuaiRoleMapUnresolved (korišćeni nestandardni tip strukture nema unos u RoleMap-u, ili je njegov lanac prekinut ili cikličan; indirektni lanci koji stižu do standardnog tipa se prihvataju, a nekorišćeni unosi RoleMap-a se nikada ne sude). v1.83.0 dodaje §7.4.4 provere modela naslova pvuaiHeadingModelMixed (generička oznaka H pomešana sa numerisanim naslovima H1..Hn) i pvuaiHeadingMultipleInNode (čvor strukture koji nosi više od jednog podredjenog H naslova). v1.84.0 dodaje §7.1 proveru neoznačenog sadržaja pvuaiUntaggedContent (iscrtan tekstualni ili slikovni objekat koji ni struktura stranice ne zahteva preko svog marked-content ID-a, niti je označen kao Artifact; goli path objekti su van provere da se ne bi označavala svuda prisutna dekoracija). v1.85.0 dodaje §7.15 proveru dinamičkog XFA pvuaiXfaDynamic (XFA konfiguracija postavlja dynamicRender na required) i penzionše kandidata za bilo koje XFA pvuaiXfaPresent (statički XFA je usklađen; vrednost enum-a ostaje, ali se više ne podiže). Od v1.85.1 se §7.18.3 provera pvuaiMissingTabsOrder izvršava po stranici: svaka anotirana stranica treba /Tabs /S u svom sopstvenom rečniku. v1.86.0 dodaje §7.21.6 provere TrueType enkodovanja pvuaiTrueTypeEncodingInvalid (nesimbolički TrueType nema Encoding, ili ono nije MacRomanEncoding ni WinAnsiEncoding direktno ni preko BaseEncoding) i pvuaiSymbolicTrueTypeEncoding (simbolički TrueType nosi nestandardno ime Encoding-a; standardna imena se tolerišu jer usklađeni dokumenti rutinski pogrešno etiketiraju standardno enkodovane fontove kao simboličke). v1.87.0 dodaje §7.21.3 provere kompozitnih fontova pvuaiCidSystemInfoMismatch (ugrađeni CMap i nasledni CIDFont se ne slažu oko Registry/Ordering, ili CIDFont Supplement prevazilazi onaj iz CMap-a), pvuaiCMapNotEmbedded (CMap referenciran imenom nije predefinisani CMap iz Tabele 118) i pvuaiCMapWModeMismatch (rečnik ugrađenog CMap-a ima WMode koji se razlikuje od sadržaja toka; sudi se samo byte-čitljivim, nekompresovanim CMap tokovima), i širi pvuaiCidFontMissingCidToGidMap da označava i CIDToGIDMap ime različito od Identity. v1.93.0 dodaje sloj PDFium objektnog modela — tri precizna problema po fontu / po karakteru izračunata iz živog PDFium stabla objekata: pvuaiPdfiumFontNotEmbedded (§7.21.4, font koji stranica stvarno koristi nije ugrađen prema FPDFFont_GetIsEmbedded), pvuaiPdfiumUnicodeMapError (§7.21.7, karakter stranice ima nevažeće Unicode mapiranje prema FPDFText_HasUnicodeMapError) i pvuaiPdfiumNotDefGlyph (§7.21.8, karakter se iscrtava kao Unicode 0 / .notdef). Ovi se dopunjuju heuristikama na nivou bajtova pvuaiFontNotEmbedded / pvuaiFontMissingToUnicode (koje se aktiviraju samo na signal o nijednom ugrađenom fontu u celom dokumentu ili o potpunom odsustvu /ToUnicode); prolaz se prekida ranim izlaskom na tri nivoa (petlja po stranicama, petlja po objektima, sken karaktera). v1.94.0 dodaje šest problema druge faze iz ponovne revizije klauzula po klauzulu: pvuaiHeadingFormatInvalid (§7.4.3, oznaka naslova koja počinje sa H, a nije ni generički H ni H + čiste arapske cifre — separatori, razmaci i rimski brojevi su zabranjeni), pvuaiMissingDocumentOutline (§7.17, dokument sa više stranica bez bookmark outline-a; dokumenti sa jednom stranicom su izuzeti), pvuaiStructElementLangInvalid (§7.2, vrednost /Lang elementa strukture koja nije važeća BCP 47 oznaka), pvuaiWidgetMissingPrintField (§7.14 / §7.18.4, Widget element strukture bez vlasnika atributa PrintField), pvuaiLinkNotInStructureTree (§7.18.5, dokument sa anotacijama /Subtype /Link čije stablo strukture ne izlaže nijedan Link element) i sloj PDFium anotacija pvuaiPdfiumAnnotationMissingContents / pvuaiPdfiumLinkMissingContents (§7.18.1 / §7.18.5, precizni sken koji izuzima skrivene, van crop-box-a, Popup i Widget anotacije, čime uklanja lažne pozitivne rezultate byte-level heuristike). v1.95.0 poboljšava odziv i pouzdanost: §7.21.3.3 provera pvuaiCMapWModeMismatch i §7.21.7 provera pvuaiToUnicodeForbiddenValue sada dekompresuju FlateDecode-kompresovane CMap / ToUnicode tokove pre skeniranja (ranije se sudilo samo nekompresovanim tokovima), a pvuaiSubsetCharSetEmpty (§7.21.4.2) označava Type 1 subset FontDescriptor čija je /CharSet string vrednost prazna (provera nedostajućeg ključa je hvatala samo potpuno odsutan ključ). v1.96.0 dodaje pvuaiAnnotationFlagsViolation (§7.18.1, neizuzeta anotacija koja nosi Hidden / Invisible / NoView) i pvuaiActionTargetMissing (§7.18.5, GoToR / URI / SubmitForm akcija bez ključa cilja), oba prenešena iz PDF/A validátora, i popravlja bug rebasing-a ParentIndex-a preko stranica u spajanju stabla strukture plus RoleMap parser koji se prerano završavao na indirektnim referencama ili vrednostima nizovaConformance pravi PDF/UA nivo i kada je Issues prazanPDF/UA-2 validacija dodatno zahteva četvorocifreni
pdfuaid:rev, efektivan PDF 2.0, A/W/S redosled tabulacije
anotacija, bez XFA-a, neprazna imena optional-content konfiguracija, bez
PDF 2.0-zastarelih Sound ili Movie anotacija i eksplicitno numerisane
tipove strukture naslova od H1 do Hn
Od v3.73.0 skup problema može da sadrži i pvuaiNaturalLanguageUncovered kada tekst stranice van Artifacts-a ili strukturni string Title, Alt, ActualText ili Expansion nema važeću efektivnu deklaraciju /Lang
Od v3.74.0 skup problema može da sadrži i pvuaiArtifactInStructureTree kada Artifact objekat stranice nosi MCID koji zahteva stablo strukture stranice, uključujući paginacione artifact-e zasnovane na putanjama
Od v3.75.0 problemi Unicode mapiranja dolaze iz jednog prolaza InspectPdfUaUnicodeCoverage u opsegu objekta; važeći ActualText pokriva samo karaktere iz svog izvornog tekstualnog objekta, dok su karakteri Artifact i PDFium-generisani isključeni iz semantičkog pokrivanja
ValidatePdfUa je inspekcija koja samo čita — ne menja
dokument i bezbedno se može pozivati više puta. Koristite je pre nego što
PDF predate arhivskom sistemu ili proveri dostupnosti, da operateru
iskažete neusklađenost. Za uobičajenu proveru „da li je ovo
PDF/UA-1?“ koja ne treba listu problema, koristite lakše
svojstvo PdfUaConformance
Conformance = pucUnknown i praznim skupom IssuespvuaiSuspectsTrue samo kada se eksplicitno /Suspects true pojavljuje u /MarkInfo. Dokumentima kojima ključ /Suspects u potpunosti nedostaje smatra se da su na toj tački usklađeni (specifikacija zabranjuje samo true)N 0 R); postojeći ključevi se zadržavaju i rečnik se normalizuje u direktan rečnik u prepisanom katalogu
uses System.TypInfo;
var
Outcome: TPdfUaValidationResult;
Issue: TPdfUaValidationIssue;
begin
Pdf1.FileName := 'C:\Incoming\report.pdf';
Pdf1.Active := True;
Outcome := Pdf1.ValidatePdfUa;
Memo1.Lines.Add('Level: ' + GetEnumName(TypeInfo(TPdfUaConformance),
Ord(Outcome.Conformance)));
for Issue in Outcome.Issues do
Memo1.Lines.Add('- ' + GetEnumName(TypeInfo(TPdfUaValidationIssue), Ord(Issue)));
end;