점진적 렌더링 및 취소

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는 토큰을 직접 받는 오버로드를 제공합니다

소유권 및 부분 결과 규칙

관련 API