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

Povezani API-ji