Progressive Rendering and Cancellation

Aplikace HotPDF umí vykreslit načtenou stránku v mnoha omezených voláních a dokáže zastavit dlouhotrvající operace s dokumentem prostřednictvím sdíleného tokenu zrušení ve vlastnictví volajícího

Progressive page rendering

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 přijímá maximální uplynulý čas v milisekundách, maximální počet operátorů obsahu stránky na nejvyšší úrovni, nebo obojí; nula znamená pro daný rozpočet neomezeno

Volání dokončí alespoň jeden operátor před použitím nenulového časového rozpočtu, takže stav grafiky je vždy pozastaven na hranici operátoru

Bitmap vystavuje živou částečnou bitmapu určenou pouze pro čtení volajícím, zatímco TakeBitmap přenáší vlastnictví bez kopírování poté, co relace dosáhne prsCompleted nebo prsCancelled

ObjectsProcessed a TotalObjects hlásí operátory obsahu na nejvyšší úrovni z každého streamu /Contents stránky v pořadí zdroje

Progressive region rendering

Session := PDF.BeginLoadedPageProgressiveRegionRender(
  0, 72, 144, 360, 432, 144);
try
  repeat
    Status := Session.ContinueRender(6, 96);
  until Status in [prsCompleted, prsCancelled];
finally
  Session.Free;
end;

Čtyři souřadnice regionu jsou body uživatelského prostoru PDF s počátkem vlevo dole a výstupní bitmapa pokrývá přesně toto okno při požadovaném DPI

Relace znovu používá cacheovaný display list, uchovává stav grafiky a textu napříč voláními a potlačuje nákladné malby cest, textu, obrazu, Form a stínování, jejichž konzervativní ohraničení neprotíná ROI

Stavové operátory a postup textu se stále provádějí v pořadí zdroje, takže vyřazení dřívější značky nemůže posunout ani přebarvit pozdější viditelnou značku

RegionVisiblePaintObjects a RegionCulledPaintObjects vystavují výběr display listu, zatímco rezervace špičkové paměti sleduje rozměry regionu místo celé stránky

Progressive JPEG scans

Když je THotPDF.ProgressiveJPEGScanDecoding nastaveno na true, vhodný progresivní obraz DCTDecode postupuje o jeden scan JPEG na každé omezené volání ContinueRender, takže živá bitmapa může zobrazit raný hrubý náhled před posledním scanem

THotPDF.ProgressiveJPEGMaxScans omezuje každý obraz na 1 až 4096 scanů, zatímco rozpočet bajtů dekódování dokumentu také pokrývá zarovnanou výstupní bitmapu

THPDFLoadedPageRenderSession.ProgressiveJPEGScansDecoded a THPDFLoadedPageRenderSession.ProgressiveJPEGImagesDecoded hlásí počty dokončených scanů a obrazů; THPDFLoadedPageRenderSession.OnProgressiveJPEGScan přijímá THPDFProgressiveJPEGScanEvent po každém viditelném scanu a může relaci zrušit

Jednotka HPDFJpeg také vystavuje THPDFJpegScanDecoder pro surové vstupy THPDFJpegByteArray s výsledky THPDFJpegScanDecodeStatus a volitelným zpětným voláním THPDFJpegCancellationCheck pro zrušení na úrovni řádků

Inkrementální cesta přijímá malby obrazů JPEG DeviceRGB nebo DeviceGray v plném cíli s výchozí neprůhledností a bez masek, přenosových funkcí, polotónů, overprintu nebo stavu průhlednosti; všechny ostatní malby používají dekodér kompletního obrazu, aby se zachovala sémantika vykreslování

Zakázání možnosti, vyžadování izolace kodeku, překročení limitu nebo výskyt chybného vstupu rovněž volí cestu kompletního obrazu bez vystavení částečného neúspěšného dekódování

Progress callbacks

THPDFProgressiveRenderProgressEvent běží po každém dokončeném operátoru a přijímá počty zpracovaných a celkových operátorů plus uplynulý čas provádění vykreslování

Nastavte parametr Cancel zpětného volání na true, aby relace skončila v prsCancelled bez zrušení sdíleného tokenu

Form XObject, vzor, dekódování obrazu nebo jiná vnořená operace patří svému obklopujícímu operátoru na nejvyšší úrovni a může překročit malý časový rozpočet, než se vrátí řízení

Operation-wide cancellation

Token := THPDFCancellationToken.Create;
try
  PDF.OperationCancellationToken := Token;
  Worker.Start;
  // Call Token.Cancel from another thread when the operation should stop
finally
  PDF.OperationCancellationToken := nil;
  Token.Free;
end;

THPDFCancellationToken je bezpečný pro vlákna, jednorázový a ve vlastnictví volajícího; Cancel trvale požaduje zrušení a IsCancellationRequested vystavuje stav

ThrowIfCancellationRequested vyvolává EHPDFOperationCancelled a zachovává název operace v OperationName

THotPDF.OperationCancellationToken se vztahuje na načítání, synchronní vykreslování, progresivní vykreslování bez explicitního tokenu, OptimizeLoadedStreams, CreatePreflightReport a ValidatePDFVT

SignPDFWithPFX a SignPDFWithSystemCertificate poskytují přetížení, která přijímají token přímo

Ownership and partial-result rules

Related APIs