Книга рецептов preflight

Этот сборник группирует preflight-API и демо в рецепты по задачам. Точные сигнатуры ищите в справочнике API; эта страница нужна, когда требуется работающий путь для приложения, скрипта сборки или задания CI.

Выберите формат вывода

var
  PDF: THotPDF;
begin
  PDF := THotPDF.Create(nil);
  try
    PDF.SavePreflightReport('Input.pdf', 'Input.preflight.txt');
    PDF.SavePreflightReport('Input.pdf', 'Input.preflight.json', '', pfJSON);
    PDF.SavePreflightReport('Input.pdf', 'Input.preflight.html', '', pfHTML);
    PDF.SavePreflightReport('Input.pdf', 'Input.preflight.csv', '', pfCSV);
  finally
    PDF.Free;
  end;
end;

Текстовый вывод байт-стабилен и удобен для diff. JSON подходит для загрузки в конвейеры и даёт каждой проверке, подсказке и предупреждению стабильный namespaced ruleId плюс структурированный location с логической областью, путём, ключом PDF и точными координатами объекта, страницы или байта, когда они доступны. HTML показывает те же идентификаторы и местоположения, а CSV сохраняет стабильные колонки для табличных и пакетных отчётов

Валидируйте документы PDF/VT

var
  PDF: THotPDF;
  Report: AnsiString;
begin
  PDF := THotPDF.Create(nil);
  try
    if not PDF.ValidatePDFVT('Input.pdf', Report) then
      WriteLn(string(Report));
  finally
    PDF.Free;
  end;
end;

Отчёт PDF/VT фокусируется на идентификации и структуре частей документа по ISO 16612-2: XMP GTS_PDFVTVersion в виде текста элементов или атрибутов RDF, сверку дат изменения, маркер базы PDF/X, output intent, DPartRoot, DPartRootNode, NodeNameListи на уровне страниц DPart охват.

Примените профиль

var
  PDF: THotPDF;
  Report: AnsiString;
begin
  PDF := THotPDF.Create(nil);
  try
    Report := PDF.CreatePreflightReportWithProfile(
      'Input.pdf', '', 'project-preflight.ini', pfJSON);
  finally
    PDF.Free;
  end;
end;

Профили подавляют названные проверки, предупреждения или все подсказки. Используйте ValidatePreflightProfile перед применением самописного профиля — когда важнее отказать по ошибке (fail-closed), чем молча проигнорировать устаревшее имя.

Создайте переиспользуемый профиль из предустановки

var
  PDF: THotPDF;
  Profile: THPDFPreflightProfile;
begin
  PDF := THotPDF.Create(nil);
  try
    Profile := PDF.GetBuiltInPreflightProfile('compact');
    Profile.DisableWarnings := 'OpenAction,JavaScript,URIAction';
    PDF.SavePreflightProfile(Profile, 'compact-no-actions.ini');
  finally
    PDF.Free;
  end;
end;

Используйте MergePreflightProfiles чтобы объединить предустановку с проектными именами. Используйте DiffPreflightProfiles чтобы увидеть дрейф профиля перед обновлением общего файла конфигурации.

Вложите отчёт в PDF

PDF.EmbedPreflightReportInPDF('Input.pdf', 'Input-with-report.pdf');
PDF.EmbedPreflightReportAsXMP('Input.pdf', 'Input-with-xmp-report.pdf');

Путь текстового вложения добавляет читаемый блок комментария после финального маркера EOF. Путь XMP добавляет payload в форме RDF для архивных конвейеров, сканирующих пакеты метаданных.

Валидируйте вложенный отчёт

var
  OriginalReport: AnsiString;
  CurrentReport: AnsiString;
begin
  if not PDF.LoadAndValidatePreflightReport(
    'Input-with-report.pdf', OriginalReport, CurrentReport) then
    WriteLn(string(PDF.ComparePreflightReports(OriginalReport, CurrentReport)));
end;

Путь валидации сверяет вложенный отпечаток со свежим прогоном preflight по исходным байтам. Помощник diff построчный и заточен под отчёты preflight HotPDF.

Запустите консервативный проход ремонта

var
  RepairsApplied: AnsiString;
begin
  if PDF.RepairPDFFromPreflightReport(
    'Broken.pdf', 'Broken-repaired.pdf', RepairsApplied) then
    WriteLn(string(RepairsApplied));
end;

Помощник ремонта намеренно узок. Он обрабатывает хвостовые байты после финального EOF и отсутствующий маркер EOF, но не перестраивает таблицы перекрёстных ссылок и не переписывает потоки.

Агрегируйте много отчётов

Reports[0] := PDF.CreatePreflightReport('A.pdf');
Reports[1] := PDF.CreatePreflightReport('B.pdf');
Summary := PDF.AggregatePreflightReports(Reports);

Агрегированный вывод перечисляет по одной строке статуса на PDF и итоги по обработанным отчётам, сбоям и предупреждениям. Полезно, когда конвейеру нужна одна сводка, хотя детальные отчёты сохраняются по каждому входному файлу.

Используйте утилиту командной строки

HotPDFPreflight Input.pdf -f json -o reports
HotPDFPreflight Input.pdf --pdfvt -o reports
HotPDFPreflight C:\Archive -r --preset compact -f text -o reports --aggregate reports\Aggregate.txt
HotPDFPreflight C:\Archive -r --profile project-preflight.ini -f html -o reports

CLI повторяет библиотечный сценарий: один файл или рекурсивный каталог на входе, вывод text / JSON / HTML, опциональные пароль и профиль, встроенная предустановка, подробный прогресс и агрегированная сводка.

Соберите статический дашборд

PreflightDashboard C:\Archive C:\Archive\preflight-dashboard

Демо дашборда пишет index.html плюс HTML-отчёты по каждому файлу. Веб-сервер не нужен, поэтому вывод можно опубликовать как статический артефакт.

Адаптируйтесь к потребителям JSON в стиле veraPDF

Report := PDF.CreatePreflightReport('Input.pdf');
JSON := PDF.ConvertPreflightReportToVeraPDFStyle(Report);

Адаптер сохраняет семантику HotPDF, перекладывая сбои в привычную структуру результатов валидации для инструментария, который уже потребляет JSON в стиле veraPDF. Его violations сохраняют те же стабильные ruleId и структурированные location значения, что и нативный JSON-отчёт

Связанные темы