점진적 렌더링 및 취소
HotPDF는 로드된 페이지를 여러 한정된 호출에 걸쳐 렌더링할 수 있으며, 공유되는 호출자 소유 취소 토큰을 통해 오래 실행되는 문서 작업을 중지할 수 있습니다
점진적 페이지 렌더링
Session := PDF.BeginLoadedPageProgressiveRender(0, 144);
try
repeat
Status := Session.ContinueRender(8, 128);
Preview.Assign(Session.Bitmap);
until Status in [prsCompleted, prsCancelled];
if Status = prsCompleted then
FinalBitmap := Session.TakeBitmap;
finally
Session.Free;
end;
ContinueRender는 밀리초 단위의 최대 경과 시간, 최상위 페이지 콘텐츠 연산자 수 또는 둘 다를 받습니다. 0은 해당 예산에서 무제한을 의미합니다
이 호출은 0이 아닌 시간 예산을 적용하기 전에 최소한 하나의 연산자를 완료하므로 그래픽 상태는 항상 연산자 경계에서 일시 중지됩니다
Bitmap은 호출자가 읽기 전용인 실시간 부분 비트맵을 노출하고, TakeBitmap은 세션이 prsCompleted 또는 prsCancelled에 도달한 후 복사 없이 소유권을 이전합니다
ObjectsProcessed와 TotalObjects는 모든 페이지 /Contents 스트림의 최상위 콘텐츠 연산자를 소스 순서로 보고합니다
진행 콜백
THPDFProgressiveRenderProgressEvent는 각 연산자가 완료된 후 실행되며 처리된 수와 전체 수 및 경과된 렌더링 실행 시간을 받습니다
콜백 Cancel 매개변수를 true로 설정하면 공유 토큰을 취소하지 않고 해당 세션을 prsCancelled로 종료합니다
Form XObject, 패턴, 이미지 디코딩 또는 다른 중첩 작업은 자신을 둘러싼 최상위 연산자에 속하므로 제어가 반환되기 전에 작은 시간 예산을 초과할 수 있습니다
작업 전체 취소
Token := THPDFCancellationToken.Create;
try
PDF.OperationCancellationToken := Token;
Worker.Start;
// 작업을 중지해야 할 때 다른 스레드에서 Token.Cancel 호출
finally
PDF.OperationCancellationToken := nil;
Token.Free;
end;
THPDFCancellationToken은 스레드로부터 안전하고 일회성이며 호출자가 소유합니다. Cancel은 영구적으로 취소를 요청하고 IsCancellationRequested는 상태를 노출합니다
ThrowIfCancellationRequested는 EHPDFOperationCancelled를 일으키고 OperationName에 작업 이름을 보존합니다
THotPDF.OperationCancellationToken은 로드, 동기식 렌더링, 명시적 토큰이 없는 점진적 렌더링, OptimizeLoadedStreams, CreatePreflightReport, ValidatePDFVT에 적용됩니다
SignPDFWithPFX와 SignPDFWithSystemCertificate는 토큰을 직접 받는 오버로드를 제공합니다
소유권 및 부분 결과 규칙
- 문서와 토큰은 자신을 참조하는 모든
THPDFLoadedPageRenderSession보다 오래 살아 있어야 합니다 - 취소된 로드 다음에 같은 문서 인스턴스에서 새로운 로드를 수행할 수 있습니다
- 스트림 최적화는 트랜잭션 방식이 아닌 협력적이므로 취소 전에 완료된 스트림은 최적화된 상태로 유지됩니다
- 취소된 서명 대상은 부분 출력을 포함할 수 있으므로 원자적 전달이 필요할 때 버려야 합니다
- Windows 개인 키 공급자 호출은 안전하게 중단할 수 없으므로 해당 호출 직전과 직후에 취소가 관찰됩니다