Метод THotPDF.ValidatePDFA4
Проверяет сгенерированный или загруженный граф объектов на соответствие поддерживаемым профилям PDF/A-4 base, PDF/A-4e engineering или PDF/A-4f associated files и возвращает стабильную структурированную диагностику
Объявление
function ValidatePDFA4(
const Options: THPDFPDFA4ValidationOptions;
out Issues: THPDFPDFA4ValidationIssues): boolean; overload;
function ValidatePDFA4(
const Options: THPDFPDFA4ValidationOptions;
out Findings: THPDFComplianceFindings): boolean; overload;
Модуль
HPDFDoc
Типы профиля и критичности
THPDFPDFA4Profile = (
p4pAutomatic,
p4pBase,
p4pEngineering,
p4pAssociatedFiles
);
THPDFPDFA4IssueSeverity = (
p4isWarning,
p4isError
);
THPDFPDFA4Profile выбирает вывод метаданных или явный профиль соответствия, а THPDFPDFA4IssueSeverity отличает предупреждающую диагностику от ошибок валидации
Опции
| Поле | Назначение |
|---|---|
Profile | Выбирает автоматическое определение по метаданным или проверку профиля base, engineering либо associated files |
MaxObjects | Ограничивает итеративный обход графа объектов, по умолчанию 1,000,000 объектов |
MaxIssues | Ограничивает объём сохраняемой диагностики, по умолчанию 1,024 записей |
MaxDecodedBytes | Ограничивает суммарный объём декодированных байтов метаданных, ICC и контентных потоков, по умолчанию 64 MiB |
MaxContentTokens | Ограничивает суммарное количество токенов контентных потоков, по умолчанию 4,000,000 токенов |
CheckEmbeddedFonts | Проверяет, что шрифты для отрисовки имеют встроенную программу шрифта |
CheckAnnotationAppearances | Проверяет флаги аннотаций и потоки внешнего вида normal |
CheckOptionalContent | Проверяет имена конфигураций optional content и их уникальность |
CheckColourSpaces | Проверяет использованные device-цвета, ICC-профили, output intents, значения по умолчанию, изображения, shadings, формы и группы прозрачности |
CheckTransparency | Проверяет использованную альфу, soft masks, blend modes и покрытие страницы blending space |
CheckCompositeFonts | Проверяет descendants шрифтов Type 0, CIDSystemInfo, совместимость CMap и ограничения CIDToGIDMap |
CheckMetadataPackets | Проверяет каждый поток метаданных на соблюдение требований UTF-8, заголовка пакета, RDF-обёртки и идентификации PDF/A |
Диагностика
Каждая запись THPDFPDFA4ValidationIssue сообщает критичность, стабильный namespaced-код, применимый пункт ISO 19005-4, путь к объекту, номер объекта, нумеруемый с нуля индекс страницы, если он известен, и человекочитаемое сообщение
Перегрузка с THPDFComplianceFindings открывает тот же обход через общую машиночитаемую модель findings с профилем PDF/A-4 и состоянием ремонта crsNotAttempted
Валидатор охватывает идентификацию PDF 2.0, trailer ID и состояние шифрования, каждый пакет метаданных, ограничения Info, заголовки ICC и число каналов, output intents документа и страниц, использованные device-цвета, унаследованное состояние графики в массивах контентных потоков и вложенных Form XObject, image masks, shadings, прозрачность, встраивание шрифтов для отрисовки, связи составных шрифтов, аннотации и их внешние виды, ограничения AcroForm, действия и дополнительные действия, связанные файлы, optional content, внешние ссылки, а также специфичные для профиля правила 3D или вложений
Диагностика цвета и прозрачности строится на paint-операторах, а не только на операторах установки цвета; токенизация контента и повторное использование декодированных потоков кэшируются, при этом каждый вызов по-прежнему вычисляет унаследованное состояние графики для своей страницы или Form-контекста
Лимиты декодированных байтов, контентных токенов, объектов и сохраняемых записей диагностики срабатывают по принципу fail-closed со стабильными findings pdfa4.validation.*, не позволяя неограниченной работе продолжиться
Пример
var
Options: THPDFPDFA4ValidationOptions;
Issues: THPDFPDFA4ValidationIssues;
begin
Options := THPDFPDFA4ValidationOptions.Default;
Options.Profile := p4pAutomatic;
if not PDF.ValidatePDFA4(Options, Issues) then
raise Exception.CreateFmt('%s at %s',
[String(Issues[0].Code), String(Issues[0].Path)]);
end;
Поведение генерации
EndDoc автоматически запускает валидатор для '4', '4E' и '4F' и выбрасывает исключение перед сериализацией, если остаётся ошибка
При генерации PDF/A-4 запись Info в trailer опускается, PDF/A-4f всегда создаёт обязательное дерево имён EmbeddedFiles, а аннотации вложений файлов принимаются только в PDF/A-4f, где встроенный поток, Filespec, отношение AF, массив AF в Catalog и дерево имён записываются вместе