THotPDF.RepairPDFUA2Structure Method
Восстанавливает исправимые дефекты namespace, атрибутов, структуры и доступности PDF/UA-2 внутри транзакции графа copy-on-write и валидирует кандидатный граф перед фиксацией
Объявление
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;
Модуль
HPDFDoc
Опции восстановления
Начните с THPDFUA2RepairOptions.Default и переопределите только те решения политики, которые требует входной рабочий процесс
| Поле | Назначение |
|---|---|
NormalizeDuplicateNamespaces | Перестраивает StructTreeRoot/Namespaces с одним каноническим косвенным словарём на URI и отклоняет конфликтующие role map |
RegisterReferencedNamespaces | Регистрирует допустимые словари пространств имён, на которые ссылаются элементы структуры, атрибуты или учитывающие пространства имён role map |
RepairStandardStructureNamespaces | Присваивает пространство имён PDF 2.0 стандартным ролям, когда пространство имён отсутствует или недопустимо, и всегда нормализует верхнеуровневый Document |
RepairAttributeNamespaces | Канонизирует ссылки на пространства имён атрибутов и удаляет недопустимые записи пространств имён из стандартных владельцев |
RepairAttributeRevisions | Нормализует отрицательные или дробные номера ревизий и удаляет осиротевшие записи ревизий из массивов атрибутов |
RepairListSemantics | Нормализует нумерацию, флаги продолжения, недопустимые типы продолжения и одну смещённую подпись, не изобретая содержимое списка |
RepairTableSemantics | Нормализует недопустимые span и scope, удаляет недопустимые локальные для таблицы ссылки на заголовки и перемещает одну смещённую подпись |
RepairRubyWarichuSequences | Переупорядочивает дочерние элементы только когда точный требуемый мультимножество ролей уже присутствует |
RepairPronunciationHints | Удаляет неверно типизированные подсказки, отсекает недопустимые ссылки на лексиконы и нормализует встроенные подтипы MIME PLS |
RepairMissingAlternateText | Восстанавливает отсутствующий Alt для Figure, Formula и Form из существующего заголовка, текста расширения, извлечённого текста того же MCID или явного fallback — в этом порядке |
RepairLanguageInheritance | Продвигает допустимый язык корня структуры или явный язык по умолчанию в Catalog и удаляет недопустимые или избыточные записи языка уровня структуры, когда наследование однозначно |
RepairHeadingOrder | Перенумеровывает только дефекты первого заголовка и пропущенных уровней, сохраняя порядок документа |
RepairArtifactTagging | Переписывает теги marked-content, связанные с элементом структуры Artifact, для содержимого производителя и загруженной страницы |
AllowDocumentFragmentHeadingStarts | Сбрасывает контекст заголовков внутри каждого DocumentFragment как для восстановления, так и для пост-восстановительной валидации |
RollbackOnValidationFailure | Восстанавливает исходный граф, когда после восстановления остаётся любая ошибка PDF/UA-2 |
CustomAttributeNamespaceURI | Поставляет явное пространство имён для владельцев пользовательских атрибутов, чья семантика не может быть безопасно выведена; пустое значение по умолчанию приводит к отказу |
DefaultLanguage | Поставляет языковой тег BCP-47 только когда ни Catalog, ни корень структуры не содержат допустимого языка |
FallbackAlternateText | Поставляет проверенный вызывающей стороной альтернативный текст после того, как все источники, производные от документа, исчерпаны; пустое значение по умолчанию никогда не фабрикует описание |
MaxGeneratedAlternateTextCharacters | Ограничивает извлечение текста того же MCID; по умолчанию 4,096 code unit UTF-16 |
MaxObjects | Ограничивает сканирование объектного графа; по умолчанию 1,000,000 объектов |
MaxRepairs | Ограничивает удерживаемые мутации; по умолчанию 100,000 операций восстановления |
Отчёт о восстановлении
THPDFUA2RepairReport сообщает, был ли граф изменён или откачен, был ли превышен лимит, статус валидации после восстановления, число осмотренных объектов, оставшиеся ошибки и счётчики для каждого семейства восстановления, включая альтернативный текст, записи языка, уровни заголовков и теги Artifact
UnresolvedAlternateTextCount, UnresolvedLanguageCount и UnresolvedArtifactCount отличают семантику, всё ещё требующую авторского просмотра, от автоматических мутаций
Возвращаемый массив THPDFUA2ValidationIssues содержит пост-восстановительную диагностику при сбое валидации и стабильную диагностику, специфичную для восстановления, когда лимит ресурса или конфликтующий дубликат role map прерывает транзакцию
Детальный overload также возвращает до-восстановительные находки, помеченные как crsApplied, crsUnresolved, crsRolledBack или crsFailed, плюс счётные сводки для каждого семейства восстановления
Этот overload с provenance выполняет дополнительный ограниченный проход валидации до восстановления; используйте существующий overload с тремя выходами, когда требуются только итоговый отчёт и issues
Атомарность и безопасность
- Каждая мутация участвует в транзакции графа документа, включая вновь выделяемые косвенные словари пространств имён
- Дублирующиеся словари пространств имён сливаются только когда их отображения ролей согласуются
- Семантика пользовательских атрибутов никогда не изобретается, если
CustomAttributeNamespaceURIне предоставлен явно - Альтернативный текст никогда не фабрикуется, если
FallbackAlternateTextне предоставлен явно - Правки содержимого страниц производителя подготавливаются до успешной валидации, тогда как правки загруженных потоков остаются внутри транзакции графа
- Двусмысленные пересечения таблиц, отсутствующие структурные дочерние элементы, конфликтующие ID, неразрешённые цели продолжения и отсутствующая семантика заголовков никогда не угадываются
- Политика по умолчанию откатывает полное восстановление, когда остаются несвязанные ошибки PDF/UA-2
- Загруженные и производственные графы используют один и тот же ограниченный путь валидации и восстановления
Example
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;