편집 가능한 진단 문서 및 복구

SaveLoadedDocumentDiagnostic은 검사와 제어된 텍스트 편집을 위한 결정적이고 압축되지 않은 출력을 생성하며, RepairDiagnosticDocument은 편집된 파일을 구조적으로 유효한 PDF로 되돌립니다

왕복 워크플로우

  1. 문서를 로드하고 SaveLoadedDocumentDiagnostic을 호출합니다
  2. /Length, xref 행, startxref를 수동으로 유지하려 하지 않고 객체 사전 또는 압축되지 않은 스트림 바이트를 편집합니다
  3. 제한된 옵션으로 RepairDiagnosticDocument를 호출합니다
  4. THPDFDiagnosticRepairReport을 검사하고 메서드가 True를 반환할 때만 복구된 대상을 사용합니다

복구 계약

엄격한 거부

복구는 중복 객체 번호, 여러 또는 누락 Catalog 객체, 깨진 트레일러 참조, 객체 사이의 비주석 바이트, 잘못된 객체 문법, 객체 또는 입력 한계, 10자리보다 넓은 클래식 xref 오프셋, 엄격한 재로드 검증 실패에 대해 fail-closed 처리합니다

검증된 객체 내부의 마커는 건너뛰므로 문자열과 인코딩된 스트림 페이로드의 객체 모양 텍스트는 xref 항목이 되지 않습니다

제한된 성능

스캐너는 짧은 캐리와 함께 1 MiB 창을 읽고, 파일 스트림 사이에서 객체 범위를 직접 복사하며, 검증된 객체 메타데이터와 제한된 사전 프로브만 유지합니다

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