Редагувальні діагностичні документи та відновлення

SaveLoadedDocumentDiagnostic створює детермінований, розпакований вивід для інспекції та контрольованого текстового редагування, тоді як RepairDiagnosticDocument перетворює відредагований файл назад у структурно дійсний PDF

Процедура роботи за повним циклом

  1. Завантажте документ і викличте SaveLoadedDocumentDiagnostic
  2. Редагуйте словники об'єктів або байти нестиснених потоків без спроби вручну підтримувати /Length, рядки xref або startxref
  3. Викличте RepairDiagnosticDocument з обмеженими параметрами
  4. Інспектуйте THPDFDiagnosticRepairReport і використовуйте відновлену ціль лише тоді, коли метод повертає True

Контракт відновлення

Суворе відхилення

Відновлення закривається на збій для дубльованих номерів об'єктів, кількох або відсутніх об'єктів Catalog, зламаних посилань трейлера, некоментованих байтів між об'єктами, недійсної граматики об'єктів, меж об'єктів або введення, класичних зсувів xref ширших за десять цифр та збоїв суворої перевірки перезавантаження

Маркери всередині перевірених об'єктів пропускаються, тому текст, схожий на об'єкт, у рядках і закодованих корисних навантаженнях потоків не стає записом xref

Обмежена продуктивність

Сканер читає вікна по 1 МіБ з коротким переносом, копіює діапазони об'єктів безпосередньо між файловими потоками та зберігає лише перевірені метадані об'єктів плюс обмежені зонди словників

MaxInputBytes, MaxObjectCount і MaxObjectNumber обмежують сканування, збережені метадані та записані рядки xref до публікації виводу

Приклад Pascal

var
  Options: THPDFDiagnosticRepairOptions;
  Report: THPDFDiagnosticRepairReport;
begin
  Options := THPDFDiagnosticRepairOptions.Default;
  Options.MaxInputBytes := Int64(16) * 1024 * 1024 * 1024;

  if not THotPDF.RepairDiagnosticDocument(
    'edited-diagnostic.pdf',
    'repaired.pdf',
    Options,
    Report
  ) then
    raise Exception.Create(string(Report.Diagnostic));
end;

Пов'язані API