Progresivno renderiranje i otkazivanje
HotPDF može renderirati učitanu stranicu kroz više ograničenih poziva i može zaustaviti dugotrajne operacije dokumenta kroz zajednički token otkazivanja u vlasništvu pozivatelja
Progresivno iscrtavanje stranica
Za linearizirane mrežne izvore THPDFLinearizedPageRedrawScheduler odvaja raspone prvog iscrtavanja od neobaveznih ovisnosti dijeljenih objekata i zahtijeva ponovno crtanje tek nakon što novostigla ovisnost može promijeniti stranicu
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 prihvaća maksimalno proteklo vrijeme u milisekundama, maksimalan broj operatora sadržaja najviše razine stranice ili oboje; nula znači neograničeno za taj proračun
Poziv dovršava najmanje jedan operator prije primjene nenultog vremenskog proračuna, tako da je grafičko stanje uvijek pauzirano na granici operatora
Bitmap izlaže živi djelomični bitmap samo-za-čitanje pozivatelju, dok TakeBitmap prenosi vlasništvo bez kopiranja nakon što sesija dostigne prsCompleted ili prsCancelled
ObjectsProcessed i TotalObjects izvještavaju operatore sadržaja najviše razine iz svakog toka /Contents stranice u izvornom redoslijedu
Progresivno iscrtavanje regija
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;Četiri koordinate regije jesu točke korisničkog prostora PDF-a s ishodištem dolje-lijevo, a izlazni bitmap pokriva točno taj prozor pri zatraženom DPI-ju
Sesija ponovno koristi predmemorirani popis prikaza, zadržava grafičko i tekstualno stanje kroz pozive i potiskuje skupe bojanja puteva, teksta, slika, Oblika i sjenčanja čije konzervativne granice ne sijeku ROI
Operatori stanja i napredovanje teksta i dalje se izvršavaju u izvornom redoslijedu, tako da culiranje ranije oznake ne može pomaknuti ili prebojati kasniju vidljivu oznaku
RegionVisiblePaintObjects i RegionCulledPaintObjects izlažu selekciju popisa prikaza, dok rezervacija vršne memorije slijedi dimenzije regije umjesto cijele stranice
Progresivni JPEG prolazi
Kada je THotPDF.ProgressiveJPEGScanDecoding true, podobna progresivna DCTDecode slika napreduje jedan JPEG scan po ograničenom pozivu ContinueRender-a tako da živi bitmap može pokazati ranu grubu pregled prije konačnog scana
THotPDF.ProgressiveJPEGMaxScans ograničava svaku sliku na između 1 i 4096 scanova, dok proračun dekodiranih bajtova dokumenta također pokriva poravnati izlazni bitmap
THPDFLoadedPageRenderSession.ProgressiveJPEGScansDecoded i THPDFLoadedPageRenderSession.ProgressiveJPEGImagesDecoded izvještavaju dovršene brojače scanova i slika; THPDFLoadedPageRenderSession.OnProgressiveJPEGScan prima THPDFProgressiveJPEGScanEvent nakon svakog vidljivog scana i može otkazati sesiju
Jedinica HPDFJpeg također izlaže THPDFJpegScanDecoder za sirove THPDFJpegByteArray ulaze, s rezultatima THPDFJpegScanDecodeStatus i neobaveznim callbackom THPDFJpegCancellationCheck za otkazivanje na razini retka
Inkrementalni put prihvaća bojanja JPEG slika DeviceRGB ili DeviceGray punog cilja sa zadanom prozirnošću i bez maski, prijenosnih funkcija, polutona, overprinta ili stanja grupa prozirnosti; sva ostala bojanja koriste dekoder potpune slike da očuvaju semantiku renderiranja
Onemogućavanje opcije, zahtijevanje izolacije kodeka, prekoračenje ograničenja ili nalaženje deformiranog ulaza također biraju put potpune slike bez izlaganja djelomično pale dekodiranja
Povratni pozivi napretka
THPDFProgressiveRenderProgressEvent izvršava se nakon svakog dovršenog operatora i prima obrađene i ukupne brojače plus proteklo vrijeme izvršavanja renderiranja
Postavite parametar callbacka Cancel na true da završite tu sesiju u prsCancelled bez otkazivanja zajedničkog tokena
Form XObject, uzorak, dekodiranje slike ili druga ugniježđena operacija pripada svom sadržavajućem operatoru najviše razine i može premašiti mali vremenski proračun prije povrata kontrole
Otkazivanje na razini operacije
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 nitno-siguran, jednokratan i u vlasništvu pozivatelja; Cancel trajno zahtijeva otkazivanje, a IsCancellationRequested izlaže stanje
ThrowIfCancellationRequested diže EHPDFOperationCancelled i čuva naziv operacije u OperationName-u
THotPDF.OperationCancellationToken primjenjuje se na učitavanje, sinkrono renderiranje, progresivno renderiranje bez eksplicitnog tokena, OptimizeLoadedStreams, CreatePreflightReport i ValidatePDFVT
SignPDFWithPFX i SignPDFWithSystemCertificate pružaju preopterećenja koja izravno prihvaćaju token
Vlasništvo i pravila djelomičnog rezultata
- Dokument i token moraju nadživjeti svaku
THPDFLoadedPageRenderSessionkoja na njih ukazuje - Nakon otkazanog učitavanja može slijediti svježe učitavanje na istoj instanci dokumenta
- Optimizacija tokova je kooperativna, a ne transakcijska, pa tokovi dovršeni prije otkazivanja ostaju optimizirani
- Otkazano potpisno odredište može sadržavati djelomični izlaz i treba ga odbaciti kada je potrebna atomska dostava
- Poziv Windows davatelja privatnih ključeva ne može se sigurno prekinuti, pa se otkazivanje opaža neposredno prije i poslije tog poziva