PDFium Delphi Component Docs

CommitIncrementalSave 메서드

컴포넌트: TPdf  ·  유닛: PDFium
마지막 커밋 이후 이루어진 편집을 새 PDF 리비전으로 덧붙입니다

구문

function CommitIncrementalSave(Stream: TStream; out Info: TPdfIncrementalCommitInfo): Boolean;

Stream기준선과 지금까지 덧붙인 모든 리비전을 포함한 완전한 문서가 기록될 대상이며, nil을 지정하면 EPdfError가 발생합니다
InfoTPdfIncrementalCommitInfo가 객체와 바이트 수, 이전 및 새 xref 오프셋, 리비전 수, 암호화와 검증 상태, 파일 내구성 결과를 받습니다
Result검증을 마친 완전한 출력이 기록되면 True

 

function CommitIncrementalSave(const FileName: string; out Info: TPdfIncrementalCommitInfo): Boolean;

FileName대상 파일이며, 같은 디렉터리의 내구성 있는 사이드 파일을 통해 원자적으로 교체됩니다
Info스트림 오버로드와 같은 TPdfIncrementalCommitInfo 보고서이며, 해당 파일 단계가 성공하면 Durable과 ReplacedAtomically가 설정됩니다
Result검증된 사이드 파일이 대상 파일을 교체하면 True

설명

활성 문서를 마지막 커밋에서 캡처한 상태와, 첫 커밋이라면 기준선과 비교하여 변경된 객체와 새로운 교차 참조 섹션을 덧붙입니다. 앞쪽 바이트는 다시 쓰지 않으므로 이전 리비전은 모두 바이트 단위로 동일하게 유지되며 복구할 수 있습니다

AppendedByteCount는 새 리비전 자체의 크기이고, PreviousOutputByteCount와 OutputByteCount는 불변 접두부와 전체 결과의 경계를 나타냅니다. PreviousXrefOffset과 OutputXrefOffset이 리비전 체인을 식별하며, ChangedObjectCount는 비교에서 찾은 객체 수를 보고합니다

모든 후보 출력은 희소 리비전 경계 검사, 엄격한 독립 재열기, 페이지 수와 보안 핸들러 검사, 그리고 PDF MAC이 있을 경우 그 검증을 통과합니다. Encrypted와 Validated가 이런 속성을 보고합니다

파일 오버로드는 대상 파일 옆에 임시 파일을 기록하고 플러시한 뒤 닫았다 다시 열어 검증을 반복하고, 원자적으로 대상을 교체합니다. Windows에서는 write-through 교체를 요청합니다. Unix에서는 교체 전에 디렉터리 플러시 지원을 확인하고 rename 뒤에 부모 디렉터리를 플러시합니다

교체 전 실패하면 기존 대상은 그대로 유지되고 세션 기준선과 리비전 수가 복원됩니다. Unix에서 rename이 성공한 뒤 디렉터리 플러시가 실패하면 내부 FPdfPlatform 유닛의 EPdfOutputCommitError가 발생합니다. 이때 출력은 이미 교체되었으며 Info.ReplacedAtomically=True, Info.Durable=False입니다. 세션은 커밋된 기준선을 유지하므로 이후 편집이 오래된 출력에 추가되지 않습니다

Durable은 플랫폼에 요청한 플러시 단계가 모두 성공했음을 나타냅니다. 전원 차단 후의 저장 장치나 파일 시스템 동작을 보증하지는 않습니다. 같은 원자적 교체를 사용하는 다른 파일 저장 API에서도 교체 후 이 예외가 발생할 수 있으므로, 호출자는 이미 출력이 커밋된 단계와 기존 출력을 보존하는 실패를 구분해야 합니다

열린 세션 없이 호출하면 EPdfError가 발생하므로 먼저 BeginIncrementalSave를 호출해야 합니다

관련 항목

BeginIncrementalSave, EndIncrementalSave, IncrementalSaveActive, SaveAs