THotPDF.RepairPDFUA2Structure Method
Reparerer reparerbare PDF/UA-2 namespace-, attribut-, strukturelle og tilgængelighedsdefekter inde i en copy-on-write graftransaktion og validerer kandidatgrafen, inden der committes
Deklaration
function RepairPDFUA2Structure(
const Options: THPDFUA2RepairOptions;
out Report: THPDFUA2RepairReport;
out Issues: THPDFUA2ValidationIssues): boolean; overload;
function RepairPDFUA2Structure(
const Options: THPDFUA2RepairOptions;
out Report: THPDFUA2RepairReport;
out Issues: THPDFUA2ValidationIssues;
out Findings: THPDFComplianceFindings): boolean; overload;
Enhed
HPDFDoc
Reparationsindstillinger
Start med THPDFUA2RepairOptions.Default og tilsidesæt kun de politikbeslutninger, som inputarbejdsgangen kræver
| Felt | Formål |
|---|---|
NormalizeDuplicateNamespaces | Genopbygger StructTreeRoot/Namespaces med én kanonisk indirekte ordbog pr. URI og afviser modstridende role maps |
RegisterReferencedNamespaces | Registrerer gyldige namespace-ordbøger, som strukturelementer, attributter eller namespace-bevidste role maps refererer |
RepairStandardStructureNamespaces | Tildeler PDF 2.0-namespace til standardroller, når namespace mangler eller er ugyldigt, og normaliserer altid det øverste Document |
RepairAttributeNamespaces | Kanoniserer attribut-namespace-referencer og fjerner ugyldige namespace-poster fra standard owners |
RepairAttributeRevisions | Normaliserer negative eller fraktionelle revisionsnumre og fjerner forældreløse revisionsposter fra attribut-arrays |
RepairListSemantics | Normaliserer nummerering, continuation-flag, ugyldige continuation-typer og én enkelt forkert placeret caption uden at opfinde listeindhold |
RepairTableSemantics | Normaliserer ugyldige spans og scopes, fjerner ugyldige tabel-lokale header-referencer og flytter én enkelt forkert placeret caption |
RepairRubyWarichuSequences | Sorterer børnene om, kun når den præcise påkrævede role-multimængde allerede er til stede |
RepairPronunciationHints | Fjerner forkert typede hints, beskærer ugyldige lexicon-referencer og normaliserer indlejrede PLS MIME-subtyper |
RepairMissingAlternateText | Gendanner manglende Alt for Figure, Formula og Form fra en eksisterende titel, ekspansionstekst, same-MCID-udtrukket tekst eller en eksplicit fallback, i netop den rækkefølge |
RepairLanguageInheritance | Promoterer et gyldigt strukturrod eller et eksplicit standardsprog op i Catalog og fjerner ugyldige eller redundante sprogposter på strukturniveau, når nedarvningen er utvetydig |
RepairHeadingOrder | Omunmererer kun first-heading- og skipped-level-defekter, mens dokumentrækkefølgen bevares |
RepairArtifactTagging | Omskriver marked-content-tags knyttet til et Artifact-strukturelement for producer- og indlæst sideindhold |
AllowDocumentFragmentHeadingStarts | Nulstiller heading-konteksten i hver DocumentFragment for både reparation og validering efter reparation |
RollbackOnValidationFailure | Gendanner den oprindelige graf, når der stadig er PDF/UA-2-fejl tilbage efter reparationen |
CustomAttributeNamespaceURI | Leverer det eksplicitte namespace til custom attribute-owners, hvis semantik ikke kan udledes sikkert, med en tom standardværdi, der fejler lukket |
DefaultLanguage | Leverer et BCP-47-sprogtag, kun når hverken Catalog eller strukturroden indeholder et gyldigt sprog |
FallbackAlternateText | Leverer kalder-gennemgået alternate text, når alle dokumentbaserede kilder fejler, med en tom standardværdi, der aldrig opfinder en beskrivelse |
MaxGeneratedAlternateTextCharacters | Afgrænser same-MCID-tekstudtrækning og er som standard 4,096 UTF-16 kodeenheder |
MaxObjects | Afgrænser scanningen af objektgrafen og er som standard 1,000,000 objekter |
MaxRepairs | Afgrænser gemte mutationer og er som standard 100,000 reparationsoperationer |
Reparationsrapport
THPDFUA2RepairReport rapporterer, om grafen blev ændret eller rullet tilbage, om en grænse blev overskredet, valideringsstatus efter reparation, undersøgte objekter, resterende fejl og antal for hver reparationsfamilie, inklusive alternate text, sprogposter, heading-niveauer og Artifact-tags
UnresolvedAlternateTextCount, UnresolvedLanguageCount og UnresolvedArtifactCount adskiller semantik, der stadig kræver forfattergennemgang, fra automatiske mutationer
Det returnerede THPDFUA2ValidationIssues-array indeholder diagnostikken efter reparation, når valideringen fejler, og stabile reparationspecifikke diagnostikker, når en ressourcegrænse eller et modstridende duplikeret role map afbryder transaktionen
Det detaljerede overload returnerer desuden fund fra før reparationen, annoteret som crsApplied, crsUnresolved, crsRolledBack eller crsFailed, plus optalte resuméer for hver reparationsfamilie
Dette provenans-overload udfører en ekstra afgrænset valideringsomgang før reparationen; brug det eksisterende overload med tre outputs, når kun slutrapport og problemer skal bruges
Atomicitet og sikkerhed
- Hver mutation indgår i dokumentets graftransaktion, inklusive nyallokerede indirekte namespace-ordbøger
- Duplikerede namespace-ordbøger flettes kun, når deres role mappings er enige
- Custom attribute-semantik opfindes aldrig, medmindre
CustomAttributeNamespaceURIeksplicit leveres - Alternate text opfindes aldrig, medmindre
FallbackAlternateTexteksplicit leveres - Producer-redigeringer af sideindhold sættes i bero, til valideringen lykkes, mens redigeringer af indlæste strømme forbliver inde i graftransaktionen
- Tvetydige tabelkryds, manglende strukturelle børn, modstridende id'er, uopløste continuation-mål og manglende header-semantik gættes aldrig
- Standardpolitikken ruller hele reparationen tilbage, når urelaterede PDF/UA-2-fejl resterer
- Indlæste grafer og producer-side-grafer bruger samme afgrænsede validerings- og reparationssti
Eksempel
var
Options: THPDFUA2RepairOptions;
Report: THPDFUA2RepairReport;
Issues: THPDFUA2ValidationIssues;
begin
Options := THPDFUA2RepairOptions.Default;
Options.DefaultLanguage := 'en-US';
Options.CustomAttributeNamespaceURI :=
'https://example.com/ns/accessibility-attributes';
if not PDF.RepairPDFUA2Structure(Options, Report, Issues) then
raise Exception.CreateFmt('%s at %s',
[String(Issues[0].Code), String(Issues[0].Path)]);
end;