THotPDF.RepairPDFUA2Structure Method
Поправя възстановимите PDF/UA-2 дефекти в namespace-и, атрибути, структура и достъпност в рамките на copy-on-write графова трансакция и валидира кандидатния граф преди commit
Декларация
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
Опции за ремонта
Започнете с THPDFUA2RepairOptions.Default и презапишете само политиките, изисквани от входния работен процес
| Поле | Предназначение |
|---|---|
NormalizeDuplicateNamespaces | Възстановява StructTreeRoot/Namespaces с един каноничен непряк речник на URI и отхвърля конфликтни role map-ове |
RegisterReferencedNamespaces | Регистрира валидни namespace речници, реферирани от структурни елементи, атрибути или role map-ове, чувствителни към namespace |
RepairStandardStructureNamespaces | Задава PDF 2.0 namespace на стандартните роли, когато namespace липсва или е невалиден, и винаги нормализира top-level Document |
RepairAttributeNamespaces | Канонизира namespace референциите на атрибутите и премахва невалидни namespace записи от стандартните собственици |
RepairAttributeRevisions | Нормализира отрицателни или дробни номера на ревизии и премахва осиротели ревизионни записи от масивите с атрибути |
RepairListSemantics | Нормализира номерация, флагове за продължение, невалидни типове продължение и един misplaced caption, без да измисля съдържание на списъка |
RepairTableSemantics | Нормализира невалидни span-ове и scope-ове, премахва невалидни локални за таблицата header референции и премества един misplaced caption |
RepairRubyWarichuSequences | Пренарежда децата само когато точният необходим multiset от роли вече е наличен |
RepairPronunciationHints | Премахва подсказки с грешен тип, реже невалидни lexicon референции и нормализира вградените PLS MIME подтипове |
RepairMissingAlternateText | Възстановява липсващ Alt за Figure, Formula и Form от съществуващо заглавие, expansion текст, извлечен текст със същия MCID или изричен fallback, в този ред |
RepairLanguageInheritance | Издига валиден език от структурния корен или изричния default до Catalog-а и премахва невалидни или излишни езикови записи на структурно ниво, когато наследяването е еднозначно |
RepairHeadingOrder | Преномерира само дефекти от тип first-heading и пропуснато ниво, като запазва реда на документа |
RepairArtifactTagging | Презаписва marked-content таговете, свързани със структурен елемент Artifact, за съдържание от producer и заредени страници |
AllowDocumentFragmentHeadingStarts | Нулира контекста на заглавията във всеки DocumentFragment както за ремонта, така и за валидацията след него |
RollbackOnValidationFailure | Възстановява първоначалния граф, когато след ремонта остане някоя PDF/UA-2 грешка |
CustomAttributeNamespaceURI | Задава изричния namespace за собственици на потребителски атрибути, чиято семантика не може да бъде безопасно изведена, с празен default, който пропада затворено |
DefaultLanguage | Задава BCP-47 езиков таг само когато нито Catalog-ът, нито структурният корен съдържат валиден език |
FallbackAlternateText | Задава прегледан от повикващия alternate текст след като всички източници, извлечени от документа, провалят, с празен default, който никога не измисля описание |
MaxGeneratedAlternateTextCharacters | Ограничава извличането на текст със същия MCID и по подразбиране е 4,096 UTF-16 code units |
MaxObjects | Ограничава сканирането на обектния граф и по подразбиране е 1,000,000 обекта |
MaxRepairs | Ограничава запазените мутации и по подразбиране е 100,000 repair операции |
Доклад от ремонта
THPDFUA2RepairReport докладва дали графът е променен или откатен, дали някое ограничение е надвишено, статуса на валидацията след ремонта, прегледаните обекти, останалите грешки и броячите за всяко семейство поправки, включително alternate текст, езикови записи, нива на заглавия и Artifact тагове
UnresolvedAlternateTextCount, UnresolvedLanguageCount и UnresolvedArtifactCount разграничават семантиката, която все още изисква преглед от автора, от автоматичните мутации
Върнатият масив THPDFUA2ValidationIssues съдържа диагностиката след ремонта, когато валидацията проваля, и стабилна диагностика, специфична за ремонта, когато ресурсно ограничение или конфликтен дублиран role map прекъсне трансакцията
Детайлният overload връща и констатациите преди ремонта, анотирани като crsApplied, crsUnresolved, crsRolledBack или crsFailed, плюс обобщени броячи за всяко семейство поправки
Този provenance overload изпълнява допълнителен ограничен валидационен проход преди ремонта; използвайте съществуващия overload с три изхода, когато са нужди само финалният доклад и проблемите
Атомарност и безопасност
- Всяка мутация участва в графовата трансакция на документа, включително новоразпределените непреки namespace речници
- Дублираните namespace речници се сливат само когато role map-овете им съвпадат
- Семантика на потребителски атрибути никога не се измисля, освен ако
CustomAttributeNamespaceURIне е зададен изрично - Alternate текст никога не се фабрикува, освен ако
FallbackAlternateTextне е зададен изрично - Редакциите в съдържанието на producer страници се stage-ват, докато валидацията успее, докато редакциите в заредени streams остават в графовата трансакция
- Двусмислени пресичания на таблици, липсващи структурни деца, конфликтни ID-та, неразрешени цели на продължения и липсващи header семантики никога не се отгатват
- Политиката по подразбиране откатва целия ремонт, когато остават несвързани PDF/UA-2 грешки
- Заредените и producer-ските графи използват един и същ ограничен път за валидация и ремонт
Пример
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;