THotPDF.RepairPDFUA2Structure Method
Opraví obnoviteľné chyby priestorov názvov, atribútov, štruktúry a prístupnosti PDF/UA-2 v rámci transakcie grafu s kopírovaním pri zápise a pred potvrdením validuje kandidátsky graf
Deklarácia
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;
Unit
HPDFDoc
Možnosti opravy
Začnite s THPDFUA2RepairOptions.Default a prepíšte len rozhodnutia politiky vyžadované vstupným pracovným postupom
| Field | Účel |
|---|---|
NormalizeDuplicateNamespaces | Znovu vytvorí StructTreeRoot/Namespaces s jedným kanonickým nepriamym slovníkom na URI a odmieta konfliktné mapy rolí |
RegisterReferencedNamespaces | Registruje platné slovníky priestorov názvov odkazované štruktúrnymi prvkami, atribútmi alebo mapami rolí zohľadňujúcimi priestory názvov |
RepairStandardStructureNamespaces | Priradí priestor názvov PDF 2.0 štandardným rolám, keď priestor názvov chýba alebo je neplatný, a vždy normalizuje najvyššiu úroveň Document |
RepairAttributeNamespaces | Kanonizuje odkazy na priestory názvov atribútov a odstraňuje neplatné záznamy priestorov názvov zo štandardných vlastníkov |
RepairAttributeRevisions | Normalizuje záporné alebo zlomkové čísla revízií a odstraňuje osirelé záznamy revízií z polí atribútov |
RepairListSemantics | Normalizuje číslovanie, príznaky pokračovania, neplatné typy pokračovania a jeden nesprávne umiestnený popis bez vymýšľania obsahu zoznamu |
RepairTableSemantics | Normalizuje neplatné rozpätia a rozsahy, odstraňuje neplatné lokálne odkazy na hlavičky tabuľky a presúva jeden nesprávne umiestnený popis |
RepairRubyWarichuSequences | Preusporiada deti len vtedy, keď presná požadovaná množina rolí už existuje |
RepairPronunciationHints | Odstraňuje nesprávne typované nápovede, orezáva neplatné odkazy na lexikón a normalizuje vložené podtypy MIME PLS |
RepairMissingAlternateText | Obnoví chýbajúci Alt pre Figure, Formula a Form z existujúceho názvu, rozširujúceho textu, extrahovaného textu rovnakého MCID alebo explicitnej náhrady v tomto poradí |
RepairLanguageInheritance | Povýši platný jazyk koreňa štruktúry alebo explicitný predvolený jazyk do katalógu a odstráni neplatné alebo redundantné jazykové záznamy na úrovni štruktúry, keď je dedičnosť jednoznačná |
RepairHeadingOrder | Prečísluje len chyby prvého nadpisu a preskočených úrovní pri zachovaní poradia dokumentu |
RepairArtifactTagging | Prepíše značky označeného obsahu spojené so štruktúrnym prvkom Artifact pre obsah producenta a načítanej stránky |
AllowDocumentFragmentHeadingStarts | Obnoví kontext nadpisov v rámci každého DocumentFragment pre opravu aj validáciu po oprave |
RollbackOnValidationFailure | Obnoví pôvodný graf, keď po oprave zostane akákoľvek chyba PDF/UA-2 |
CustomAttributeNamespaceURI | Dodáva explicitný priestor názvov pre vlastníkov vlastných atribútov, ktorých sémantiku nemožno bezpečne odvodiť, s prázdnou predvolenou hodnotou, ktorá zlyhá uzavretá |
DefaultLanguage | Dodáva jazykovú značku BCP-47 len vtedy, keď ani katalóg ani koreň štruktúry neobsahuje platný jazyk |
FallbackAlternateText | Dodáva alternatívny text posúdený volajúcim po zlyhaní všetkých zdrojov odvodených z dokumentu, s prázdnou predvolenou hodnotou, ktorá nikdy nevymýšľa popis |
MaxGeneratedAlternateTextCharacters | Obmedzuje extrakciu textu rovnakého MCID a predvolene na 4 096 kódových jednotiek UTF-16 |
MaxObjects | Obmedzuje skenovanie grafu objektov a predvolene na 1 000 000 objektov |
MaxRepairs | Obmedzuje uchované mutácie a predvolene na 100 000 operácií opravy |
Správa o oprave
THPDFUA2RepairReport hlási, či sa graf zmenil alebo vrátil, či bol prekročený limit, stav validácie po oprave, preskúmané objekty, zostávajúce chyby a počty pre každú rodinu opráv vrátane alternatívneho textu, jazykových záznamov, úrovní nadpisov a značiek Artifact
UnresolvedAlternateTextCount, UnresolvedLanguageCount a UnresolvedArtifactCount odlišujú sémantiku, ktorá stále vyžaduje posúdenie autora, od automatických mutácií
Vrátené pole THPDFUA2ValidationIssues obsahuje diagnostiku po oprave, keď validácia zlyhá, a stabilnú diagnostiku špecifickú pre opravu, keď limit zdrojov alebo konfliktná duplicitná mapa rolí preruší transakciu
Podrobné preťaženie tiež vracia zistenia pred opravou označené ako crsApplied, crsUnresolved, crsRolledBack alebo crsFailed plus počítané súhrny pre každú rodinu opráv
Toto preťaženie pôvodu vykonáva dodatočný ohraničený prechod validácie pred opravou; použite existujúce preťaženie s tromi výstupmi, keď sa vyžaduje len konečná správa a problémy
Atómovosť a bezpečnosť
- Každá mutácia sa zúčastňuje transakcie grafu dokumentu vrátane novo pridelených nepriamych slovníkov priestorov názvov
- Duplicitné slovníky priestorov názvov sa spájajú len vtedy, keď sa ich mapovania rolí zhodujú
- Sémantika vlastných atribútov sa nikdy nevymýšľa, pokiaľ nie je explicitne dodaný
CustomAttributeNamespaceURI - Alternatívny text sa nikdy nevymýšľa, pokiaľ nie je explicitne dodaný
FallbackAlternateText - Úpravy obsahu stránky producenta sa pripravujú, kým validácia neuspeje, zatiaľ čo úpravy načítaných tokov zostávajú v rámci transakcie grafu
- Nejednoznačné priesečníky tabuliek, chýbajúce štruktúrne deti, konfliktné ID, nevyriešené ciele pokračovania a chýbajúca sémantika hlavičiek sa nikdy nehádajú
- Predvolená politika vráti celú opravu, keď zostanú nesúvisiace chyby PDF/UA-2
- Grafy načítané a na strane producenta používajú rovnakú ohraničenú cestu validácie a opravy
Príklad
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;