Progressiv rendering och avbrytning

HotPDF kan rendera en inläst sida över flera begränsade anrop och kan stoppa långkörande dokumentoperationer genom en delad avbrottstoken som ägs av anroparen

Progressiv sidrendering

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 accepterar en maximal förfluten tid i millisekunder, ett maximalt antal toppnivåoperatorer i sidinnehållet, eller båda; noll betyder obegränsat för den budgeten

Anropet avslutar minst en operator innan en tidsbudget som inte är noll tillämpas, så grafiktillståndet är alltid pausat vid en operatörsgräns

Bitmap exponerar den levande anroparen-läsbara delvisa bilden, medan TakeBitmap överför ägandet utan att kopiera efter att sessionen når prsCompleted eller prsCancelled

ObjectsProcessed och TotalObjects rapporterar operatorer på toppnivå från varje sidas /Contents-ström i källordning

Progressiv regionrendering

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 fyra regionkoordinaterna är PDF-points i användarrymden med ett nederst-vänster-origin och utdatabitmappen täcker exakt det fönstret vid den begärda DPI:n

Sessionen återanvänder den cachelagrade display-listan, behåller grafik- och texttillstånd över anrop och undertrycker dyra path-, text-, bild-, Form- och skuggningspaints vars konservativa gränser inte skär ROI:n

Tillståndsoperatorer och textframsteg körs fortfarande i källordning, så att cullera ett tidigare märke inte kan flytta eller omfärga ett senare synligt märke

RegionVisiblePaintObjects och RegionCulledPaintObjects exponerar display-list-urvalet, medan toppminnesreservationen följer regionmåtten i stället för hela sidan

Progressiva JPEG-skanningar

När THotPDF.ProgressiveJPEGScanDecoding är true, framstegs en berättigad progressiv DCTDecode-bild med en JPEG-skanning per begränsat ContinueRender-anrop, så att den levande bitmappen kan visa en tidig grov förhandsvisning före den slutliga skanningen

THotPDF.ProgressiveJPEGMaxScans begränsar varje bild till mellan 1 och 4096 skanningar, medan dokumentets avkodnings-byte-budget även täcker den justerade utdatabitmappen

THPDFLoadedPageRenderSession.ProgressiveJPEGScansDecoded och THPDFLoadedPageRenderSession.ProgressiveJPEGImagesDecoded rapporterar antalet slutförda skanningar och bilder; THPDFLoadedPageRenderSession.OnProgressiveJPEGScan tar emot en THPDFProgressiveJPEGScanEvent efter varje synlig skanning och kan avbryta sessionen

Enheten HPDFJpeg exponerar även THPDFJpegScanDecoder för råa THPDFJpegByteArray-indata, med THPDFJpegScanDecodeStatus-resultat och en valfri THPDFJpegCancellationCheck-återanropsfunktion för avbrytning på radnivå

Den inkrementella sökvägen accepterar helmål-DeviceRGB- eller DeviceGray-JPEG-bildpaints med standardopacitet och inga masker, transferfunktioner, halvtoner, övertryck eller transparensgrupptillstånd; alla andra paints använder helbildsavkodaren för att bevara renderingssemantiken

Att inaktivera alternativet, kräva codecisolering, överskrida en gräns eller stöta på felformaterad indata väljer också helbildssökvägen utan att exponera ett delvis misslyckat avkodningsresultat

Förloppsåteranrop

THPDFProgressiveRenderProgressEvent körs efter varje slutförd operator och tar emot bearbetade och totala antal plus förfluten renderingsexekveringstid

Ställ återanropsfunktionens Cancel-parameter på true för att avsluta den sessionen med prsCancelled utan att avbryta den delade token

En Form-XObject, ett mönster, en bildavkodning eller annan nästlad operation tillhör sin inneslutande toppnivåoperator och kan överskrida en liten tidsbudget innan kontrollen återvänder

Avbrytning av hela operationen

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 är trådsäker, one-shot och ägs av anroparen; Cancel begär avbrytning permanent och IsCancellationRequested exponerar tillståndet

ThrowIfCancellationRequested avger EHPDFOperationCancelled och bevarar operationsnamnet i OperationName

THotPDF.OperationCancellationToken gäller för inläsning, synkron rendering, progressiv rendering utan explicit token, OptimizeLoadedStreams, CreatePreflightReport och ValidatePDFVT

SignPDFWithPFX och SignPDFWithSystemCertificate erbjuder överlagringar som accepterar en token direkt

Regler för ägande och delresultat

Relaterade API:er