Rendering Progresif dan Pembatalan

HotPDF dapat merender halaman yang dimuat melalui beberapa panggilan terbatas dan dapat menghentikan operasi dokumen berjalan-lama melalui token pembatalan bersama milik pemanggil

Rendering halaman progresif

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 menerima waktu berlalu maksimum dalam milidetik, jumlah maksimum operator konten halaman tingkat-atas, atau keduanya; nol berarti tak-terbatas untuk anggaran itu

Panggilan menyelesaikan setidaknya satu operator sebelum menerapkan anggaran waktu non-nol, sehingga status grafik selalu dijeda di batas operator

Bitmap mengekspos bitmap parsial langsung hanya-baca pemanggil, sedangkan TakeBitmap mentransfer kepemilikan tanpa menyalin setelah sesi mencapai prsCompleted atau prsCancelled

ObjectsProcessed dan TotalObjects melaporkan operator konten tingkat-atas dari setiap aliran /Contents halaman dalam urutan sumber

Rendering wilayah progresif

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;

Empat koordinat wilayah adalah titik ruang-pengguna PDF dengan origin kiri-bawah dan bitmap keluaran mencakup tepat jendela itu pada DPI yang diminta

Sesi menggunakan ulang daftar tampilan ter-cache, mempertahankan status grafik dan teks di seluruh panggilan, dan menekan cat path, teks, gambar, Form, dan shading yang mahal yang batas konservatifnya tidak berpotongan dengan ROI

Operator status dan kemajuan teks tetap dieksekusi dalam urutan sumber, sehingga pemangkasan cat sebelumnya tidak dapat memindahkan atau mewarnai ulang cat terlihat berikutnya

RegionVisiblePaintObjects dan RegionCulledPaintObjects mengekspos pemilihan daftar-tampilan, sedangkan reservasi memori puncak mengikuti dimensi wilayah alih-alih halaman penuh

Pemindaian JPEG progresif

Saat THotPDF.ProgressiveJPEGScanDecoding true, gambar DCTDecode progresif yang memenuhi syarat maju satu pemindaian JPEG per panggilan ContinueRender terbatas sehingga bitmap langsung dapat menampilkan pratinjau kasar awal sebelum pemindaian akhir

THotPDF.ProgressiveJPEGMaxScans membatasi setiap gambar antara 1 dan 4096 pemindaian, sedangkan anggaran byte dekode dokumen juga mencakup bitmap keluaran yang diratakan

THPDFLoadedPageRenderSession.ProgressiveJPEGScansDecoded dan THPDFLoadedPageRenderSession.ProgressiveJPEGImagesDecoded melaporkan jumlah pemindaian dan gambar yang selesai; THPDFLoadedPageRenderSession.OnProgressiveJPEGScan menerima THPDFProgressiveJPEGScanEvent setelah setiap pemindaian terlihat dan dapat membatalkan sesi

Unit HPDFJpeg juga mengekspos THPDFJpegScanDecoder untuk masukan THPDFJpegByteArray mentah, dengan hasil THPDFJpegScanDecodeStatus dan callback THPDFJpegCancellationCheck opsional untuk pembatalan tingkat-baris

Jalur inkremental menerima cat gambar JPEG DeviceRGB atau DeviceGray target-penuh dengan opasitas default dan tanpa mask, fungsi transfer, halftone, overprint, atau status grup-transparansi; semua cat lain menggunakan dekoder gambar-lengkap untuk mempertahankan semantik rendering

Menonaktifkan opsi, mengharuskan isolasi codec, melampaui batas, atau menemui masukan salah-format juga memilih jalur gambar-lengkap tanpa mengekspos dekode parsial yang gagal

Callback kemajuan

THPDFProgressiveRenderProgressEvent berjalan setelah setiap operator selesai dan menerima jumlah yang diproses dan total beserta waktu eksekusi render yang berlalu

Atur parameter Cancel callback menjadi true untuk mengakhiri sesi itu dalam prsCancelled tanpa membatalkan token bersama

Form XObject, pola, dekode gambar, atau operasi bersarang lain termasuk dalam operator tingkat-atas yang melingkupinya dan dapat melampaui anggaran waktu kecil sebelum kontrol kembali

Pembatalan seluruh-operasi

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 aman-utas, sekali-pakai, dan dimiliki pemanggil; Cancel secara permanen meminta pembatalan dan IsCancellationRequested mengekspos status

ThrowIfCancellationRequested memunculkan EHPDFOperationCancelled dan mempertahankan nama operasi dalam OperationName

THotPDF.OperationCancellationToken berlaku untuk pemuatan, render sinkron, render progresif tanpa token eksplisit, OptimizeLoadedStreams, CreatePreflightReport, dan ValidatePDFVT

SignPDFWithPFX dan SignPDFWithSystemCertificate menyediakan overload yang menerima token secara langsung

Aturan kepemilikan dan hasil-parsial

API terkait