편집 가능한 진단 문서 및 복구
SaveLoadedDocumentDiagnostic은 검사와 제어된 텍스트 편집을 위한 결정적이고 압축되지 않은 출력을 생성하며, RepairDiagnosticDocument은 편집된 파일을 구조적으로 유효한 PDF로 되돌립니다
왕복 워크플로우
- 문서를 로드하고
SaveLoadedDocumentDiagnostic을 호출합니다 /Length, xref 행,startxref를 수동으로 유지하려 하지 않고 객체 사전 또는 압축되지 않은 스트림 바이트를 편집합니다- 제한된 옵션으로
RepairDiagnosticDocument를 호출합니다 THPDFDiagnosticRepairReport을 검사하고 메서드가True를 반환할 때만 복구된 대상을 사용합니다
복구 계약
- 소스는 PDF 헤더로 시작하고 HotPDF가 내보낸
%QDF-1.0마커를 가져야 합니다 - 검증된 간접 객체는 문자열, 사전, 스트림 페이로드를 다시 인코딩하지 않고 물리적 순서로 복사됩니다
- 직접, 간접, 누락, 오래된 스트림
/Length값은 측정된 페이로드 길이로 대체됩니다 - 클래식 xref 테이블, 정규 트레일러, 정확한
startxref오프셋이 측정된 출력 위치에서 재구축됩니다 - 트레일러는 유효한
/Info,/ID,/Encrypt값을 보존하고/Root을 단일 검증된 Catalog에 바인딩합니다 - 대상은 형제 임시 파일로 쓰여지고 모든 검사가 성공한 후에만 요청된 경로를 대체합니다
엄격한 거부
복구는 중복 객체 번호, 여러 또는 누락 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;