Кулінарна книга Preflight

Ця книга рецептів (cookbook) групує API та демо-версії попередньої перевірки (preflight) у орієнтовані на завдання рецепти. Використовуйте довідник 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 підходить для конвеєрної обробки. HTML є самодостатнім і може бути відкритий безпосередньо або збережений як артефакт CI. 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, намірі виводу, 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 перед застосуванням профілю користувача, якщо суворе блокування помилок є важливішим, ніж мовчазне ігнорування застарілих назв

Створення багаторазового профілю з пресета

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 додає корисне навантаження у форматі 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;

Шлях валідації порівнює вбудований відбиток із новим запуском попередньої перевірки вихідних байтів. Помічник порівняння орієнтований на рядки та налаштований для звітів попередньої перевірки 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) повторює процес роботи з бібліотекою: введення одного файлу або рекурсивний пошук у каталозі, вивід у форматі тексту / 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

Пов'язані теми