Progressive Rendering and Cancellation

HotPDF dokáže renderovať načítanú stránku cez viacero ohraničených volaní a zastaviť dlho bežiace operácie dokumentu cez zdieľaný token zrušenia vo vlastníctve volajúceho

Progresívne renderovanie strán

Pre linearizované sieťové zdroje THPDFLinearizedPageRedrawScheduler oddeľuje rozsahy prvého vykreslenia od voliteľných závislostí zdieľaných objektov a vyžaduje prekreslenie až potom, keď novo doručená závislosť môže zmeniť stránku

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 prijíma maximálny uplynulý čas v milisekundách, maximálny počet operátorov obsahu stránky najvyššej úrovne alebo oboje; nula znamená bez limitu pre daný rozpočet

Volanie dokončí aspoň jeden operátor skôr, než aplikuje nenulový časový rozpočet, takže grafický stav sa vždy pozastaví na hranici operátora

Bitmap sprístupňuje živý čiastočný bitmap len na čítanie volajúcim, zatiaľ čo TakeBitmap prevedie vlastníctvo bez kopírovania, keď relácia dosiahne prsCompleted alebo prsCancelled

ObjectsProcessed a TotalObjects hlásia operátory obsahu najvyššej úrovne z každého streamu /Contents stránky v zdrojovom poradí

Progresívne renderovanie oblastí

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;

Štyri súradnice oblasti sú body PDF user space s pôvodom v ľavom dolnom rohu a výstupný bitmap pokrýva presne toto okno pri požadovanom DPI

Relácia znovu používa cacheovaný display list, drží grafický a textový stav naprieč volaniami a potláča drahé kreslenia ciest, textu, obrázkov, Form a shadingov, ktorých konzervatívne hranice nepretínajú ROI

Stavové operátory a posuvy textu sa stále vykonávajú v zdrojovom poradí, takže vyradenie skoršej značky nemôže presunúť alebo prefarbiť neskoršiu viditeľnú značku

RegionVisiblePaintObjects a RegionCulledPaintObjects sprístupňujú výber display listu, zatiaľ čo rezervácia špičkovej pamäti nasleduje rozmery oblasti namiesto celej stránky

Progresívne JPEG skeny

Keď je THotPDF.ProgressiveJPEGScanDecoding true, spôsobilý progresívny obrázok DCTDecode postúpi o jeden JPEG sken na ohraničené volanie ContinueRender, takže živý bitmap môže ukázať skorý hrubý náhľad pred finálnym skenom

THotPDF.ProgressiveJPEGMaxScans obmedzuje každý obrázok na 1 až 4096 skenov, zatiaľ čo rozpočet dekódovaných bajtov dokumentu pokrýva aj zarovnaný výstupný bitmap

THPDFLoadedPageRenderSession.ProgressiveJPEGScansDecoded a THPDFLoadedPageRenderSession.ProgressiveJPEGImagesDecoded hlásia počty dokončených skenov a obrázkov; THPDFLoadedPageRenderSession.OnProgressiveJPEGScan prijíma THPDFProgressiveJPEGScanEvent po každom viditeľnom skene a môže reláciu zrušiť

Jednotka HPDFJpeg tiež sprístupňuje THPDFJpegScanDecoder pre surové vstupy THPDFJpegByteArray s výsledkami THPDFJpegScanDecodeStatus a voliteľným spätným volaním THPDFJpegCancellationCheck pre rušenie na úrovni riadkov

Inkrementálna cesta prijíma obrazové kreslenia JPEG s plným cieľom DeviceRGB alebo DeviceGray s predvoleným krytím a bez masiek, prenosových funkcií, poltónov, overprint alebo stavu transparency skupiny; všetky ostatné kreslenia používajú dekodér kompletného obrázku, aby sa zachovala sémantika renderovania

Vypnutie voľby, vyžiadanie izolácie kodeku, prekročenie limitu alebo stretnutie s poškodeným vstupom tiež vyberie cestu kompletného obrázka bez odhalenia čiastočného zlyhaného dekódovania

Spätné volania priebehu

THPDFProgressiveRenderProgressEvent beží po každom dokončenom operátore a prijíma počty spracovaných a celkových plus uplynulý čas vykonávania renderovania

Nastavte parameter Cancel spätného volania na true, aby sa táto relácia dokončila v prsCancelled bez zrušenia zdieľaného tokenu

Form XObject, vzorka, dekódovanie obrázku alebo iná vnorená operácia patrí k svojmu obklopujúcemu operátorovi najvyššej úrovne a môže prekročiť malý časový rozpočet skôr, než sa vráti kontrola

Rušenie naprieč operáciou

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é pre vlákna, jednorazové a vo vlastníctve volajúceho; Cancel natrvalo vyžiada rušenie a IsCancellationRequested sprístupňuje stav

ThrowIfCancellationRequested vyvolá EHPDFOperationCancelled a zachová názov operácie v OperationName

THotPDF.OperationCancellationToken sa aplikuje na načítanie, synchronné renderovanie, progresívne renderovanie bez explicitného tokenu, OptimizeLoadedStreams, CreatePreflightReport a ValidatePDFVT

SignPDFWithPFX a SignPDFWithSystemCertificate poskytujú preťaženia, ktoré prijímajú token priamo

Vlastníctvo a pravidlá čiastočných výsledkov

Súvisiace API