Progressive Rendering and Cancellation
HotPDF gali atvaizduoti įkeltą puslapį per kelis apribotus kvietimus ir gali sustabdyti ilgiau trunkančias dokumento operacijas per bendrą kvietėjo valdomą atšaukimo žetoną
Žingsninis puslapių atvaizdavimas
Linearizuotiesiems tinklo šaltiniams THPDFLinearizedPageRedrawScheduler atskira pirmojo atvaizdavimo diapazonus nuo neprivalomų bendrų objektų priklausomybių ir prašo perbraižyti tik tada, kai naujai atklius priklausomybė gali pakeisti puslapį
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 priima didžiausiąjį praėjusį laiką milisekundėmis, didžiausiąjį viršutinio lygio puslapio turinio operatorių skaičių arba abu; nulinė reikšmė reiškia neribotą tą biudžetą
Kvietimas baigia bent vieną operatorių prieš taikydamas nenulinę laiko biologę, todėl grafikos būsena visada pristabdoma operatoriaus riboje
Bitmap atskleidžia gyvąjį tik skaitymui skirtą dalinį taškų atvaizdą, o TakeBitmap po prsCompleted arba prsCancelled pasiekimo perduoda valdymą nekopijuodamas
ObjectsProcessed ir TotalObjects rodo aukščiausio lygio turinio operatorius iš kiekvieno puslapio /Contents srauto šaltinio tvarka
Prieauginis sričių atvaizdavimas
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;
Keturios srities koordinatės yra PDF naudotojo erdvės taškai su kairės apatinės kilmės atskaita, o išvesties bitmap tiksliai dengia tą langą pageidaujamuoju DPI
Sesija naudoja podėlyje esantį display list, išlaiko grafikos ir teksto būsenas tarp kvietimų ir slopina brangius kontūrų, teksto, vaizdų, Form ir šydymų piešinius, kurių konservatyviosios ribos nesikerta su ROI
Būsenos operatoriai ir teksto žingsnis vis tiek vyksta šaltinio tvarka, tad ankstesnio ženklo išmetimas negali perkelti arba pakeisti spalvą paskesniam matomam ženklui
RegionVisiblePaintObjects ir RegionCulledPaintObjects atskleidžia display list atranką, o didžiausios atminties rezervavimas priklauso nuo srities matmenų, o ne nuo viso puslapio
Prieauginės JPEG peržiūros
Kai THotPDF.ProgressiveJPEGScanDecoding yra true, tinkamas progresyvusis DCTDecode vaizdas kiekvienu apribotu ContinueRender iškvietimu pasistūmi per vieną JPEG scan, todėl gyvas bitmap iki paskutinio scan gali parodyti ankstyvą grubią peržiūrą
THotPDF.ProgressiveJPEGMaxScans kiekvieną vaizdą riboja nuo 1 iki 4096 peržiūrų, o dokumento iškodavimo baitų biudžetas apima ir sulygiuotąją išvesties bitmap
THPDFLoadedPageRenderSession.ProgressiveJPEGScansDecoded ir THPDFLoadedPageRenderSession.ProgressiveJPEGImagesDecoded rodo užbaigtų scan ir vaizdų skaičių; THPDFLoadedPageRenderSession.OnProgressiveJPEGScan po kiekvieno matomo scan gauna THPDFProgressiveJPEGScanEvent ir gali atšaukti sesiją
HPDFJpeg modulis taip pat atskleidžia THPDFJpegScanDecoder neapdorotoms THPDFJpegByteArray įvestims, su THPDFJpegScanDecodeStatus rezultatais ir neprivalomuoju THPDFJpegCancellationCheck atgaliniu kvietimu eilučių lygio atšaukimui
Prieaugio kelias priima visą paskirtį dengiančius DeviceRGB arba DeviceGray JPEG vaizdų piešinius su numatytuoju drumstumu be kaukių, perdavimo funkcijų, rastro (halftone), overprint arba permatomumo grupės būsenos; visi kiti piešiniai naudoja pilno vaizdo dekoderį, kad išliktų atvaizdavimo semantika
Išjungus parinktį, reikalaujant kodekso izoliacijos, viršijus ribą arba sutikus netinkamą įvestį, taip pat renkamas pilno vaizdo kelias, neatskleidžiant dalinės nesėkmingos iškodavimo išvesties
Eigos atgaliniai kvietimai
THPDFProgressiveRenderProgressEvent vyksta po kiekvieno užbaigto operatoriaus ir gauna apdorotų bei visų skaičius ir praėjusį atvaizdavimo vykdymo laiką
Nustatykite atgalinio kvietimo Cancel parametrą į true, kad sesija būtų užbaigta prsCancelled, neužbaigiant bendrojo žetono
Form XObject, raštas, vaizdo iškodavimas arba kita įdėtoji operacija priklauso jos apsupančiam viršutinio lygio operatoriui ir gali viršyti mažąjį laiko biudžetą, kol valdymas sugrįžta
Visos operacijos atšaukimas
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 yra gijoms saugus, vienkartinis ir valdomas kvietėjo; Cancel nuolatinei atšaukia operaciją, o IsCancellationRequested atskleidžia būseną
ThrowIfCancellationRequested iškelia EHPDFOperationCancelled ir išsaugo operacijos pavadinimą OperationName
THotPDF.OperationCancellationToken taikomas įkėlimui, sinchroniniam atvaizdavimui, prieauginiam atvaizdavimui be aiškaus žetono, OptimizeLoadedStreams, CreatePreflightReport ir ValidatePDFVT
SignPDFWithPFX ir SignPDFWithSystemCertificate turi perkrovas, kurios tiesiogiai priima token
Nuosavybė ir dalinių rezultatų taisyklės
- Dokumentas ir žetonas turi išgyventi ilgiau už kiekvieną juos nurodantį
THPDFLoadedPageRenderSession - Po atšaukto įkėlimo tas pats dokumento egzempliorius gali būti įkeltas iš naujo
- Srautų optimizacija yra bendradarbiavimu paremta, o ne transakcinė, tad prieš atšaukimą užbaigti srautai lieka optimizuoti
- Atšauktoje pasirašymo paskirtyje gali būti dalinė išvestis, todėl reikalaujant atominio išdavimo ją reikia išmesti
- Windows privataus rakto teikėjo kvietimo negalima saugiai nutraukti, todėl atšaukimas stebimas tučtuojau prieš ir po to kvietimo