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

Povezani API-ji