Progresivno upodabljanje in preklic
HotPDF lahko upodobi naloženo stran prek več omejenih klicov in lahko ustavi dolgotrajne operacije dokumenta prek skupnega žetona preklica, ki ga ima lastnik klicatelja
Progresivno upodabljanje strani
Za linearizirane omrežne vire THPDFLinearizedPageRedrawScheduler loči obsege za prvo izrisovanje od izbirnih odvisnosti od skupnih objektov in ponovni izris zahteva šele, ko lahko na novo prispela odvisnost spremeni stran
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 sprejme največji pretečeni čas v milisekundah, največje število operacij vsebine strani najvišje ravni ali oboje; nič pomeni neomejeno za ta proračun
Klic dokonča vsaj en operator, preden uporabi ne-ničelni proračun časa, zato je grafično stanje vedno zaustavljeno na meji operatorja
Bitmap izpostavi živo bitmapno sliko za branje samo s strani klicatelja, medtem ko TakeBitmap prenese lastništvo brez kopiranja po tem, ko seja doseže prsCompleted ali prsCancelled
ObjectsProcessed in TotalObjects poročata o operatorjih vsebine najvišje ravni iz vsakega toka /Contents strani v izvornem vrstnem redu
Progresivno upodabljanje območja
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;
Štiri koordinate območja so točke prostora uporabnika PDF z izhodiščem v spodnjem levem kotu in izhodna bitmapna slika pokriva natanko to okno pri zahtevanem DPI
Seja znova uporablja predpomnjeni seznam prikaza, ohranja grafično in besedilno stanje prek klicov ter zavira drago risanje poti, besedila, slik, Form in senčenj, katerih konzervativne meje ne sekajo ROI
Operatorji stanja in napredovanje besedila še vedno izvajajo v izvornem vrstnem redu, zato izrezovanje prejšnjega označevalca ne more premakniti ali spremeniti barve kasnejšega vidnega označevalca
RegionVisiblePaintObjects in RegionCulledPaintObjects izpostavita izbiro seznama prikaza, medtem ko rezervacija največje porabe pomnilnika sledi dimenzijam območja namesto cele strani
Progresivni skeni JPEG
Kadar je THotPDF.ProgressiveJPEGScanDecoding resnično, primerljiva progresivna slika DCTDecode napreduje za en sken JPEG na omejeni klic ContinueRender, tako da lahko živa bitmapna slika prikaže zgodnji grobi predogled pred končnim skenom
THotPDF.ProgressiveJPEGMaxScans omeji vsako sliko med 1 in 4096 skeni, medtem ko proračun dekodiranih bajtov dokumenta pokriva tudi poravnano izhodno bitmapno sliko
THPDFLoadedPageRenderSession.ProgressiveJPEGScansDecoded in THPDFLoadedPageRenderSession.ProgressiveJPEGImagesDecoded poročata o končanih številkah skenov in slik; THPDFLoadedPageRenderSession.OnProgressiveJPEGScan prejme THPDFProgressiveJPEGScanEvent po vsakem vidnem skenu in lahko prekine sejo
Enota HPDFJpeg izpostavi tudi THPDFJpegScanDecoder za surove vhode THPDFJpegByteArray, z rezultati THPDFJpegScanDecodeStatus in neobveznim povratnim klicem THPDFJpegCancellationCheck za preklic na ravni vrstice
Inkrementalna pot sprejme risbe JPEG s celotnim ciljem DeviceRGB ali DeviceGray s privzeto motnostjo in brez mask, prenosnih funkcij, polnilnih mrež, prebarvanja ali stanja skupine prosojnosti; vse druge risbe uporabljajo pot polne slike za ohranjanje semantike upodabljanja
Onemogočanje možnosti, zahteva izolacije kodeka, presežena omejitev ali srečanje z nepravilno oblikovanim vhodom prav tako izbere pot polne slike, ne da bi izpostavilo delno neuspešno dekodiranje
Povratni klici napredka
THPDFProgressiveRenderProgressEvent teče po vsaki končani operaciji in prejme števila obdelanih in skupnih elementov ter pretečeni čas izvajanja upodabljanja
Nastavite parameter Cancel povratnega klica na resnično, da se ta seja zaključi v prsCancelled brez preklica skupnega žetona
Form XObject, vzorec, dekodiranje slike ali druga ugnezdena operacija pripada svoji obkrožni operaciji najvišje ravni in lahko preseže majhen proračun časa, preden se nadzor vrne
Preklic operacije
Token := THPDFCancellationToken.Create;
try
PDF.OperationCancellationToken := Token;
Worker.Start;
// Pokličite Token.Cancel iz druge niti, ko naj se operacija ustavi
finally
PDF.OperationCancellationToken := nil;
Token.Free;
end;
THPDFCancellationToken je varen za niti, enkraten in v lasti klicatelja; Cancel trajno zahteva preklic in IsCancellationRequested izpostavi stanje
ThrowIfCancellationRequested sproži EHPDFOperationCancelled in ohrani ime operacije v OperationName
THotPDF.OperationCancellationToken se uporablja za nalaganje, sinhrono upodabljanje, progresivno upodabljanje brez eksplicitnega žetona, OptimizeLoadedStreams, CreatePreflightReport in ValidatePDFVT
SignPDFWithPFX in SignPDFWithSystemCertificate ponujata preobtežitve, ki neposredno sprejmejo žeton
Pravila lastništva in delnih rezultatov
- Dokument in žeton morata preživeti vsako
THPDFLoadedPageRenderSession, ki se nanju sklicuje - Preklicanemu nalaganju lahko sledi novo nalaganje na isti instanci dokumenta
- Optimizacija tokov je sodelujoča in ne transakcijska, zato tokovi, dokončani pred preklicem, ostanejo optimizirani
- Cilj podpisa s preklicem lahko vsebuje delni izhod in ga je treba zavreči, kadar je zahtevan atomski dostop
- Klica ponudnika zasebnega ključa Windows ni mogoče varno prekiniti, zato se preklic opazi takoj pred in po tem klicu