Progresivno renderovanje i otkazivanje

HotPDF može da renderuje učitanu stranicu kroz više ograničenih poziva i može da zaustavi dugotrajne operacije nad dokumentom putem zajedničkog tokena otkazivanja u vlasništvu pozivaoca

Progresivno renderovanje stranice

Za linearizovane mrežne izvore, THPDFLinearizedPageRedrawScheduler razdvaja opsege prvog iscrtavanja od opcionih zavisnosti deljenih objekata i zahteva ponovno iscrtavanje tek nakon što novo stigla zavisnost može da promeni 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 prihvata maksimalno proteklo vreme u milisekundama, maksimalan broj operatora sadržaja stranice najvišeg nivoa ili oboje; nula znači neograničeno za taj budžet

Poziv dovršava bar jedan operator pre primene budžeta vremena različitog od nule, tako da je stanje grafike uvek pauzirano na granici operatora

Bitmap izlaže živi delimični bitmap samo za čitanje od strane pozivaoca, dok TakeBitmap prenosi vlasništvo bez kopiranja nakon što sesija dostigne prsCompleted ili prsCancelled

ObjectsProcessed i TotalObjects prijavljuju operatore sadržaja najvišeg nivoa iz svakog /Contents toka stranice po redosledu izvora

Progresivno renderovanje regiona

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 regiona su tačke u PDF korisničkom prostoru sa poreklom u donjem levom uglu, a izlazni bitmap pokriva tačno taj prozor na traženoj DPI vrednosti

Sesija ponovo koristi keširanu listu prikaza, zadržava stanje grafike i teksta između poziva i potiskuje skupe ispune putanja, teksta, slika, Form objekata i senčenja čije konzervativne granice ne presecaju ROI

Operatori stanja i napredovanje teksta se i dalje izvršavaju po redosledu izvora, tako da odbacivanje ranije oznake ne može da pomeri ili promeni boju kasnije vidljive oznake

RegionVisiblePaintObjects i RegionCulledPaintObjects izlažu izbor liste prikaza, dok rezervacija vršne memorije prati dimenzije regiona umesto cele stranice

Progresivni JPEG skenovi

Kada je THotPDF.ProgressiveJPEGScanDecoding tačno, podobna progresivna DCTDecode slika napreduje za jedan JPEG sken po ograničenom ContinueRender pozivu tako da živi bitmap može da prikaže rani grubi pregled pre finalnog skena

THotPDF.ProgressiveJPEGMaxScans ograničava svaku sliku na između 1 i 4096 skenova, dok budžet bajtova dekodiranja dokumenta takođe pokriva poravnati izlazni bitmap

THPDFLoadedPageRenderSession.ProgressiveJPEGScansDecoded i THPDFLoadedPageRenderSession.ProgressiveJPEGImagesDecoded prijavljuju brojeve dovršenih skenova i slika; THPDFLoadedPageRenderSession.OnProgressiveJPEGScan prima THPDFProgressiveJPEGScanEvent nakon svakog vidljivog skena i može da otkaže sesiju

Jedinica HPDFJpeg takođe izlaže THPDFJpegScanDecoder za sirove THPDFJpegByteArray ulaze, sa THPDFJpegScanDecodeStatus rezultatima i opcionim THPDFJpegCancellationCheck povratnim pozivom za otkazivanje na nivou reda

Inkrementalna putanja prihvata ispune JPEG slika DeviceRGB ili DeviceGray sa punim ciljem, podrazumevanom neprozirnošću i bez maski, funkcija prenosa, polutonova, preštampavanja ili stanja grupe transparentnosti; svi drugi ispuni koriste dekoder cele slike da bi sačuvali semantiku renderovanja

Onemogućavanje opcije, zahtevanje izolacije kodeka, prekoračenje ograničenja ili susretanje sa neispravno oblikovanim ulazom takođe bira putanju cele slike bez izlaganja delimično neuspešnog dekodiranja

Povratni pozivi napretka

THPDFProgressiveRenderProgressEvent se pokreće nakon svakog dovršenog operatora i prima brojeve obrađenih i ukupnih stavki plus proteklo vreme izvršavanja renderovanja

Postavite parametar Cancel povratnog poziva na tačno da biste završili tu sesiju u prsCancelled bez otkazivanja zajedničkog tokena

Form XObject, šablon, dekodiranje slike ili druga ugnežđena operacija pripada svom obuhvatajućem operatoru najvišeg nivoa i može da prekorači mali vremenski budžet pre nego što se kontrola vrati

Otkazivanje na nivou 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 bezbedan za niti, jednokratan i u vlasništvu pozivaoca; Cancel trajno zahteva otkazivanje, a IsCancellationRequested izlaže stanje

ThrowIfCancellationRequested podiže EHPDFOperationCancelled i čuva ime operacije u OperationName

THotPDF.OperationCancellationToken se primenjuje na učitavanje, sinhrono renderovanje, progresivno renderovanje bez eksplicitnog tokena, OptimizeLoadedStreams, CreatePreflightReport i ValidatePDFVT

SignPDFWithPFX i SignPDFWithSystemCertificate pružaju preopterećenja koja prihvataju token direktno

Pravila vlasništva i delimičnih rezultata

Povezani API-ji