Progressiivinen renderöinti ja peruutus
HotPDF voi renderöidä ladatun sivun useiden rajattujen kutsujen yli ja voi pysäyttää pitkäkestoiset asiakirjaoperaatiot soittajan omistaman jaetun peruutustunnuksen kautta
Progressiivinen sivun renderöinti
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 hyväksyy suurimman kuluneen ajan millisekunteina, suurimman määrän ylimmän tason sivun sisältöoperaattoreita tai molemmat; nolla tarkoittaa rajoittamatonta kyseiselle budjetille
Kutsu suorittaa vähintään yhden operaattorin ennen nollasta poikkeavan aikabudjetin soveltamista, joten grafiikkatila keskeytyy aina operaattorirajalla
Bitmap paljastaa elävän soittajan vain luku -osittaisen bittikartan, kun taas TakeBitmap siirtää omistajuuden kopioimatta, kun istunto saavuttaa prsCompleted- tai prsCancelled-tilan
ObjectsProcessed ja TotalObjects raportoivat ylimmän tason sisältöoperaattorit jokaisesta sivun /Contents-virrasta lähdejärjestyksessä
Progressiivinen alueen renderöinti
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;
Neljä aluekoordinaattia ovat PDF-käyttäjätilan pisteitä, joiden origo on vasemmassa alakulmassa, ja tulostusbittikartta kattaa täsmälleen kyseisen ikkunan pyydetyllä DPI-arvolla
Istunto käyttää uudelleen välimuistitettua näyttölistaa, säilyttää grafiikka- ja tekstitilan kutsujen yli ja tukahduttaa kalliit polku-, teksti-, kuva-, Form- ja varjostusmaalaukset, joiden konservatiiviset rajat eivät leikkaa ROI:ta
Tilaoperaattorit ja tekstin eteneminen suoritetaan silti lähdejärjestyksessä, joten aiemman merkin karsiminen ei voi siirtää tai värjätä uudelleen myöhempää näkyvää merkkiä
RegionVisiblePaintObjects ja RegionCulledPaintObjects paljastavat näyttölistan valinnan, kun taas huippumuistivaraus seuraa alueen mittoja koko sivun sijaan
Progressiiviset JPEG-skannaukset
Kun THotPDF.ProgressiveJPEGScanDecoding on tosi, kelvollinen progressiivinen DCTDecode-kuva etenee yhden JPEG-skannauksen verran kutakin rajattua ContinueRender-kutsua kohti, joten elävä bittikartta voi näyttää varhaisen karkean esikatselun ennen viimeistä skannausta
THotPDF.ProgressiveJPEGMaxScans rajaa kunkin kuvan 1–4096 skannaukseen, kun taas asiakirjan purettujen tavujen budjetti kattaa myös kohdistetun tulostusbittikartan
THPDFLoadedPageRenderSession.ProgressiveJPEGScansDecoded ja THPDFLoadedPageRenderSession.ProgressiveJPEGImagesDecoded raportoivat valmiit skannaus- ja kuvamäärät; THPDFLoadedPageRenderSession.OnProgressiveJPEGScan vastaanottaa THPDFProgressiveJPEGScanEvent-tapahtuman jokaisen näkyvän skannauksen jälkeen ja voi peruuttaa istunnon
HPDFJpeg-yksikkö paljastaa myös THPDFJpegScanDecoder-luokan raa'ille THPDFJpegByteArray-syötteille, THPDFJpegScanDecodeStatus-tuloksilla ja valinnaisella THPDFJpegCancellationCheck-takaisinkutsulla rivitason peruutusta varten
Inkrementaalinen polku hyväksyy täysikohde-DeviceRGB- tai DeviceGray-JPEG-kuvamaalaukset oletuspeittävyydellä ilman maskeja, siirtofunktioita, puolisävyjä, päällepainatusta tai läpinäkyvyysryhmän tilaa; kaikki muut maalaukset käyttävät täyskuvan dekooderia renderöintisemantiikan säilyttämiseksi
Asetuksen poistaminen käytöstä, koodekin eristyksen vaatiminen, rajan ylittäminen tai virheellinen syöte valitsee myös täyskuvan polun paljastamatta osittaista epäonnistunutta dekoodausta
Edistymistakaisinkutsut
THPDFProgressiveRenderProgressEvent suoritetaan jokaisen valmiin operaattorin jälkeen ja vastaanottaa käsitellyt ja kokonaismäärät sekä kuluneen renderöinnin suoritusajan
Aseta takaisinkutsun Cancel-parametri todeksi päättääksesi kyseisen istunnon prsCancelled-tilaan peruuttamatta jaettua tunnusta
Form-XObject, kuvio, kuvan dekoodaus tai muu sisäkkäinen operaatio kuuluu sitä ympäröivään ylimmän tason operaattoriin ja voi ylittää pienen aikabudjetin ennen hallinnan palautumista
Operaationlaajuinen peruutus
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 on säieturvallinen, kertakäyttöinen ja soittajan omistama; Cancel pyytää pysyvästi peruutusta ja IsCancellationRequested paljastaa tilan
ThrowIfCancellationRequested nostaa EHPDFOperationCancelled-poikkeuksen ja säilyttää operaation nimen OperationName-kentässä
THotPDF.OperationCancellationToken koskee latausta, synkronista renderöintiä, progressiivista renderöintiä ilman nimenomaista tunnusta, OptimizeLoadedStreams-metodia, CreatePreflightReport-metodia ja ValidatePDFVT-metodia
SignPDFWithPFX ja SignPDFWithSystemCertificate tarjoavat ylikuormitukset, jotka hyväksyvät tunnuksen suoraan
Omistajuus- ja osittaistulossäännöt
- Asiakirjan ja tunnuksen on elettävä pidempään kuin jokaisen niihin viittaavan
THPDFLoadedPageRenderSession-istunnon - Peruutettua latausta voi seurata uusi lataus samassa asiakirjaesiintymässä
- Virtaoptimointi on yhteistoiminnallista eikä transaktionaalista, joten ennen peruutusta valmiit virrat pysyvät optimoituina
- Peruutettu allekirjoituskohde voi sisältää osittaista tulostetta ja se tulee hylätä, kun atomista toimitusta vaaditaan
- Windowsin yksityisen avaimen tarjoajan kutsua ei voi keskeyttää turvallisesti, joten peruutus havaitaan välittömästi ennen ja jälkeen kyseisen kutsun