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

Liittyvät API:t