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
- Dokumentet og tokenet skal leve længere end hver
THPDFLoadedPageRenderSessionder henviser til dem - En annulleret indlæsning kan efterfølges af en ny indlæsning på samme dokumentinstans
- Strømoptimering er samarbejdende snarere end transaktionel, så strømme, der fuldføres før annullering, forbliver optimerede
- En annulleret signeringsdestination kan indeholde delvist output og bør kasseres, når atomar levering kræves
- Et kald til en Windows-udbyder af private nøgler kan ikke afbrydes sikkert, så annullering observeres umiddelbart før og efter kaldet