Progressieve weergave en annulering
HotPDF kan een geladen pagina over meerdere begrensde aanroepen weergeven en kan langlopende documentbewerkingen stoppen via een gedeeld in eigendom van de aanroeper zijnd annulerings-token
Progressieve paginaweergave
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 accepteert een maximale verstreken tijd in milliseconden, een maximum aantal topniveau-paginainhoudsoperatoren, of beide; nul betekent onbeperkt voor dat budget
De aanroep voltooit ten minste één operator voordat een niet-nul tijdbudget wordt toegepast, zodat de grafische toestand altijd wordt onderbroken op een operatorgrens
Bitmap stelt de levende alleen-lezen-deelbitmap van de aanroeper bloot, terwijl TakeBitmap eigendom overdraagt zonder kopiëren nadat de sessie prsCompleted of prsCancelled bereikt
ObjectsProcessed en TotalObjects rapporteren topniveau-inhoudsoperatoren uit elke pagina-/Contents-stroom in bronvolgorde
Progressieve regio-weergave
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 vier regio-coördinaten zijn PDF-gebruikersruimte-punten met een links-onder-oorsprong en de uitvoerbitmap bedekt exact dat venster op de gevraagde DPI
De sessie hergebruikt de gecachede display-list, behoudt grafische- en teksttoestand over aanroepen en onderdrukt dure pad-, tekst-, afbeeldings-, Form- en shading-schilderbewerkingen waarvan de conservatieve grenzen de ROI niet snijden
Statusoperatoren en tekstvoortgang voeren nog steeds in bronvolgorde uit, zodat het weglaten van een eerdere markering een latere zichtbare markering niet kan verplaatsen of herkleuren
RegionVisiblePaintObjects en RegionCulledPaintObjects stellen de display-list-selectie bloot, terwijl de piekgeheugenreservering de regio-afmetingen volgt in plaats van de volledige pagina
Progressieve JPEG-scans
Wanneer THotPDF.ProgressiveJPEGScanDecoding waar is, gaat een in aanmerking komende progressieve DCTDecode-afbeelding met één JPEG-scan per begrensde ContinueRender-aanroep vooruit, zodat de live-bitmap een vroeg ruw voorbeeld kan tonen vóór de laatste scan
THotPDF.ProgressiveJPEGMaxScans beperkt elke afbeelding tot tussen 1 en 4096 scans, terwijl het decode-bytebudget van het document ook de uitgelijnde uitvoerbitmap bestrijkt
THPDFLoadedPageRenderSession.ProgressiveJPEGScansDecoded en THPDFLoadedPageRenderSession.ProgressiveJPEGImagesDecoded rapporteren voltooide scan- en afbeelding-aantallen; THPDFLoadedPageRenderSession.OnProgressiveJPEGScan ontvangt een THPDFProgressiveJPEGScanEvent na elke zichtbare scan en kan de sessie annuleren
De eenheid HPDFJpeg stelt ook THPDFJpegScanDecoder bloot voor raw-THPDFJpegByteArray-invoer, met THPDFJpegScanDecodeStatus-resultaten en een optionele THPDFJpegCancellationCheck-callback voor regel-niveau-annulering
Het incrementele pad accepteert full-target DeviceRGB- of DeviceGray-JPEG-afbeeldingsschilderingen met standaarddekking en zonder masks, transferfuncties, halftones, overprint of transparantiegroep-toestand; alle andere schilderingen gebruiken de volledige-afbeelding-decoder om renderingsemantiek te behouden
Het uitschakelen van de optie, het vereisen van codec-isolatie, het overschrijden van een limiet of het tegenkomen van onjuist gevormde invoer selecteert ook het volledige-afbeelding-pad zonder een gedeeltelijk mislukte decode bloot te stellen
Voortgangs-callbacks
THPDFProgressiveRenderProgressEvent draait na elke voltooide operator en ontvangt verwerkte en totale aantallen plus de verstreken weergave-uitvoeringstijd
Stel de Cancel-parameter van de callback in op waar om die sessie in prsCancelled te laten eindigen zonder het gedeelde token te annuleren
Een Form XObject, patroon, afbeeldingsdecode of andere geneste bewerking hoort bij zijn omsluitende topniveau-operator en kan een klein tijdbudget overschrijden voordat de controle terugkeert
Bewerkingsbrede annulering
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 is threadveilig, one-shot en in eigendom van de aanroeper; Cancel verzoekt permanent annulering en IsCancellationRequested stelt de toestand bloot
ThrowIfCancellationRequested werpt EHPDFOperationCancelled en behoudt de bewerkingsnaam in OperationName
THotPDF.OperationCancellationToken geldt voor laden, synchrone weergave, progressieve weergave zonder een expliciet token, OptimizeLoadedStreams, CreatePreflightReport en ValidatePDFVT
SignPDFWithPFX en SignPDFWithSystemCertificate bieden overloads die rechtstreeks een token accepteren
Eigendom- en deelresultaat-regels
- Het document en token moeten elke
THPDFLoadedPageRenderSessionoverleven die ernaar verwijst - Een geannuleerde lading kan worden gevolgd door een nieuwe lading op dezelfde documentinstantie
- Stroomoptimalisatie is coöperatief in plaats van transactioneel, dus stromen die vóór annulering zijn voltooid blijven geoptimaliseerd
- Een geannuleerde ondertekeningsbestemming kan gedeeltelijke uitvoer bevatten en moet worden verwijderd wanneer atomische levering is vereist
- Een Windows-privésleutel-provider-aanroep kan niet veilig worden onderbroken, dus annulering wordt onmiddellijk vóór en na die aanroep waargenomen