Progressiv rendering og annullering

HotPDF kan rendere en indlæst side over flere afgrænsede kald og kan standse langvarige dokumentoperationer med et delt annulleringstoken, som kalderen ejer

Progressiv siderendering

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 accepterer en maksimalt forløbet tid i millisekunder, et maksimalt antal indholdsoperatorer på øverste sideniveau eller begge dele; nul betyder ubegrænset for det pågældende budget

Kaldet fuldfører mindst én operator, før et tidsbudget, der ikke er nul, anvendes, så grafiktilstanden altid sættes på pause ved en operatorgrænse

Bitmap viser den løbende delvise bitmap, som kalderen kun kan læse, mens TakeBitmap overfører ejerskabet uden kopiering, efter at sessionen når prsCompleted or prsCancelled

ObjectsProcessed and TotalObjects rapporterer indholdsoperatorer på øverste niveau fra hver sides /Contents -stream i kildeorden

Progressiv områderendering

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;

De fire områdekoordinater er PDF-brugerfladerummets punkter med oprindelse nederst til venstre, og outputbitmapet dækker præcist dette vindue ved den ønskede DPI

Sessionen genbruger den cachelagte visningsliste, bevarer grafik- og teksttilstand på tværs af kald og undertrykker dyre tegninger af stier, tekst, billeder, Form og skygger, hvis konservative grænser ikke skærer ROI

Tilstandsoperatorer og tekstfremrykning udføres stadig i kildeorden, så frasortering af et tidligere mærke ikke kan flytte eller genfarve et senere synligt mærke

RegionVisiblePaintObjects and RegionCulledPaintObjects viser valget i visningslisten, mens reservationen af spidshukommelse følger områdets dimensioner frem for hele siden

Progressive JPEG-skanninger

Når THotPDF.ProgressiveJPEGScanDecoding er true, vil et egnet progressivt DCTDecode-billede gå frem med én JPEG-skanning pr afgrænset ContinueRender-kald, så det løbende bitmap kan vise en tidlig grov forhåndsvisning før den sidste skanning

THotPDF.ProgressiveJPEGMaxScans begrænser hvert billede til mellem 1 og 4096 skanninger, mens dokumentets afkodningsbytebudget også omfatter det justerede outputbitmap

THPDFLoadedPageRenderSession.ProgressiveJPEGScansDecoded and THPDFLoadedPageRenderSession.ProgressiveJPEGImagesDecoded rapporterer antal færdige skanninger og billeder; THPDFLoadedPageRenderSession.OnProgressiveJPEGScan modtager en THPDFProgressiveJPEGScanEvent efter hver synlig skanning og kan annullere sessionen

Enheden HPDFJpeg eksponerer også THPDFJpegScanDecoder til rå THPDFJpegByteArray -input, med THPDFJpegScanDecodeStatus -resultater og et valgfrit THPDFJpegCancellationCheck -tilbagekald for annullering på rækkeniveau

Den trinvise sti accepterer JPEG-billedtegninger med DeviceRGB eller DeviceGray for hele målet, standardopacitet og ingen masker, overførselsfunktioner, rastertoner, overtryk eller gennemsigtighedsgruppetilstand; alle andre tegninger bruger fuldbilledafkoderen for at bevare renderingens semantik

Deaktivering af indstillingen, krav om codec-isolation, overskridelse af en grænse eller ugyldigt input vælger også fuldbilledstien uden at eksponere en delvist fejlet afkodning

Status-tilbagekald

THPDFProgressiveRenderProgressEvent køres efter hver fuldført operator og modtager behandlede og samlede antal samt forløbet renderingstid

Sæt tilbagekaldets Cancel -parameter til true for at afslutte sessionen i prsCancelled uden at annullere det delte token

Et Form XObject, et mønster, en billedafkodning eller en anden indlejret operation hører til dens omsluttende operator på øverste niveau og kan overskride et lille tidsbudget, før kontrollen returneres

Annullering for hele operationen

Token := THPDFCancellationToken.Create;
try
  PDF.OperationCancellationToken := Token;
  Worker.Start;
  // Kald Token.Cancel fra en anden tråd, når operationen skal stoppe
finally
  PDF.OperationCancellationToken := nil;
  Token.Free;
end;

THPDFCancellationToken er trådsikkert, engangs og ejet af kalderen; Cancel anmoder permanent om annullering, og IsCancellationRequested eksponerer tilstanden

ThrowIfCancellationRequested udløser EHPDFOperationCancelled og bevarer operationsnavnet i OperationName

THotPDF.OperationCancellationToken gælder for indlæsning, synkron rendering, progressiv rendering uden et eksplicit token, OptimizeLoadedStreams, CreatePreflightReport, and ValidatePDFVT

SignPDFWithPFX and SignPDFWithSystemCertificate leverer overloads, der accepterer et token direkte

Regler for ejerskab og delvise resultater

Relaterede API’er