Progressiv gjengivelse og avbrytelse
HotPDF kan gjengi en lastet side over flere avgrensede kall, og kan stoppe langvarige dokumentoperasjoner gjennom et delt kallereid avbrytelses-token
Progressiv sidegjengivelse
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 godtar en maksimal forløpt tid i millisekunder, et maksimalt antall toppnivå-sideinnholdsoperatører, eller begge; null betyr ubegrenset for det budsjettet
Kallet fullfører minst én operatør før det anvender et ikke-null tidsbudsjett, så grafikkstatusen er alltid pauset ved en operatørgrense
Bitmap avdekker den levende kallereid-som-bare-leser delvise bitmappen, mens TakeBitmap overfører eierskap uten å kopiere etter at økten når prsCompleted eller prsCancelled
ObjectsProcessed og TotalObjects rapporterer toppnivå-innholdsoperatører fra hver side-/Contents-strøm i kildeordrekkefølge
Progressiv region-gjengivelse
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 regionkoordinatene er PDF-brukerrom-punkter med en nedre-venstre opprinnelse, og utdata-bitmappen dekker nøyaktig det vinduet ved den ønskede DPI-en
Økten gjenbruker den hurtigbufrede visningslisten, beholder grafik- og tekststatus på tvers av kall, og undertrykker kostbar bane-, tekst-, bilde-, Form- og skyggeleggingsmaling med konservative grenser som ikke krysser ROI-en
Statusoperatører og tekstframføring utføres fortsatt i kildeordrekkefølge, så utskjæring av et tidligere merke kan ikke flytte eller male om et senere synlig merke
RegionVisiblePaintObjects og RegionCulledPaintObjects avdekker visningsliste-utvalget, mens toppminne-reservasjonen følger regiondimensjonene i stedet for hele siden
Progressive JPEG-skanninger
Når THotPDF.ProgressiveJPEGScanDecoding er sann, avanserer et kvalifisert progressivt DCTDecode-bilde med én JPEG-skanning per avgrenset ContinueRender-kall, slik at den levende bitmappen kan vise en tidlig grov forhåndsvisning før den siste skanningen
THotPDF.ProgressiveJPEGMaxScans begrenser hvert bilde til mellom 1 og 4096 skanninger, mens dokumentets dekode-byte-budsjett også dekker den justerte utdata-bitmappen
THPDFLoadedPageRenderSession.ProgressiveJPEGScansDecoded og THPDFLoadedPageRenderSession.ProgressiveJPEGImagesDecoded rapporterer fullførte skanne- og bildetall; THPDFLoadedPageRenderSession.OnProgressiveJPEGScan mottar en THPDFProgressiveJPEGScanEvent etter hver synlige skanning og kan avbryte økten
Enheten HPDFJpeg avdekker også THPDFJpegScanDecoder for rå THPDFJpegByteArray-innganger, med THPDFJpegScanDecodeStatus-resultater og en valgfri THPDFJpegCancellationCheck-tilbakeringing for rad-nivå-avbrytelse
Den inkrementelle banen godtar full-mål DeviceRGB- eller DeviceGray-JPEG-bildemalinger med standard opasitet og ingen masker, overføringsfunksjoner, halvtoner, overprint eller transparensgruppe-status; alle andre malinger bruker full-bilde-dekoderen for å bevare gjengivelsessemantikk
Å deaktivere alternativet, kreve kodek-isolasjon, overskride en grense eller møte feilformert inngang velger også full-bilde-banen uten å blottlegge en delvis feilet dekoding
Framdrifts-tilbakeringinger
THPDFProgressiveRenderProgressEvent kjører etter hver fullførte operatør og mottar behandlede og totale tall pluss forløpt gjengivelses-utførelsestid
Sett tilbakeringingens Cancel-parameter til sann for å avslutte den økten i prsCancelled uten å avbryte det delte tokenet
En Form-XObject, et mønster, en bildedekoding eller en annen nestet operasjon tilhører den omsluttende toppnivå-operatøren og kan overskride et lite tidsbudsjett før kontrollen returnerer
Operasjonsoverordnet avbrytelse
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 er trådsikker, engangs og kallereid; Cancel ber permanent om avbrytelse, og IsCancellationRequested avdekker tilstanden
ThrowIfCancellationRequested utløser EHPDFOperationCancelled og bevarer operasjonsnavnet i OperationName
THotPDF.OperationCancellationToken gjelder innlasting, synkron gjengivelse, progressiv gjengivelse uten eksplisitt token, OptimizeLoadedStreams, CreatePreflightReport og ValidatePDFVT
SignPDFWithPFX og SignPDFWithSystemCertificate gir overlastinger som godtar et token direkte
Eierskaps- og delvis-resultatregnler
- Dokumentet og tokenet må overleve hver
THPDFLoadedPageRenderSessionsom refererer til dem - En avbrutt innlasting kan følges av en fersk innlasting på samme dokumentinstans
- Strømoptimalisering er kooperativ snarere enn transaksjonell, så strømmer som fullføres før avbrytelse forblir optimerte
- Et avbrutt signeringsmål kan inneholde delvis utdata og bør forkastes når atomisk levering kreves
- Et Windows privatnøkkel-leverandørkall kan ikke avbrytes sikkert, så avbrytelse observeres umiddelbart før og etter det kallet