procedure BeginIncrementalSave(AllowSignedDocument: Boolean = False);
function CommitIncrementalSave(Stream: TStream; out Info: TPdfIncrementalCommitInfo): Boolean;
function CommitIncrementalSave(const FileName: string; out Info: TPdfIncrementalCommitInfo): Boolean;
procedure EndIncrementalSave;
property IncrementalSaveActive: Boolean;
| AllowSignedDocument | 서명된 문서에서의 세션을 명시적으로 허용하며 기본값은 거부입니다 |
| Stream | 이 커밋 후 누적된 전체 PDF를 받는 TStream입니다 |
| FileName | 형제 임시 파일이 성공한 뒤에만 교체되는 출력 경로입니다 |
| Info | 대상 쓰기가 성공한 후 반환되는 커밋별 통계입니다 |
| ChangedObjectCount | 이 커밋에서 추가한 변경 또는 신규 간접 객체 수 |
| AppendedByteCount | 이전 출력의 정확한 접두사 뒤에 추가된 바이트 수 |
| OutputByteCount | 이 커밋이 반환한 전체 출력의 총 바이트 수 |
| RevisionCount | 현재 세션에서 커밋된 비어 있지 않은 리비전 수 |
BeginIncrementalSave는 비교 기준선이자 첫 번째 완전한 출력으로 사용할 안정적인 PDFium 의미론적 스냅샷을 캡처합니다
각 커밋은 현재 상태를 캡처하고 활성 classic, hybrid, xref-stream, object-stream 객체를 해석한 다음 객체 세대와 정확한 본문 바이트를 비교합니다
이전 출력 뒤에는 변경되거나 새로 생긴 간접 객체만 기록되고, 이어서 필요한 최소 크기의 xref와 trailer 리비전이 기록됩니다
classic xref 소스는 classic xref 테이블로 이어지고 xref-stream 소스는 자기 색인 xref 스트림으로 이어집니다
변경된 것이 없으면 이전 출력이 바이트 단위로 그대로 반환되고 리비전은 추가되지 않으며 RevisionCount도 늘어나지 않습니다
파일 오버로드는 형제 임시 파일을 쓰고 대상을 원자적으로 교체하며, 쓰기나 교체가 실패하면 세션 상태를 복원합니다
AllowSignedDocument가 True가 아니면 서명된 문서는 거부되며, 명시적 허용은 DocMDP나 FieldMDP 정책을 검증하지 않습니다EPdfError를 일으킵니다Compressed 속성과 무관하므로 객체 비교가 안정적으로 유지됩니다
var
Info: TPdfIncrementalCommitInfo;
begin
Pdf.BeginIncrementalSave;
try
Pdf.PageNumber := 1;
Pdf.PageRotation := ro90;
Pdf.CommitIncrementalSave('revision-1.pdf', Info);
Pdf.PageRotation := ro180;
Pdf.CommitIncrementalSave('revision-2.pdf', Info);
finally
Pdf.EndIncrementalSave;
end;
end;