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
- Dokumen dan token harus hidup lebih lama dari setiap
THPDFLoadedPageRenderSessionyang merujuknya - Pemuatan yang dibatalkan dapat diikuti pemuatan baru pada instans dokumen yang sama
- Optimasi aliran bersifat kooperatif, bukan transaksional, sehingga aliran yang selesai sebelum pembatalan tetap teroptimasi
- Tujuan penandatanganan yang dibatalkan dapat berisi keluaran parsial dan harus dibuang saat pengiriman atomik diperlukan
- Panggilan penyedia kunci privat Windows tidak dapat diinterupsi dengan aman, sehingga pembatalan diamati tepat sebelum dan sesudah panggilan itu