Progressive Rendering and Cancellation
HotPDF có thể dựng một trang đã nạp qua nhiều lời gọi có giới hạn và có thể dừng các thao tác tài liệu chạy lâu qua một token hủy bỏ dùng chung do caller sở hữu
Progressive page rendering
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 chấp nhận một thời gian trôi qua tối đa tính bằng mili giây, một số toán tử nội dung trang cấp cao tối đa, hoặc cả hai; zero nghĩa là không giới hạn cho ngân sách đó
Lời gọi hoàn tất ít nhất một toán tử trước khi áp dụng ngân sách thời gian khác không, nên trạng thái đồ họa luôn được tạm dừng tại một ranh giới toán tử
Bitmap phơi bày bitmap một phần trực tiếp chỉ-đọc của caller, trong khi TakeBitmap chuyển quyền sở hữu mà không sao chép sau khi phiên đạt prsCompleted hoặc prsCancelled
ObjectsProcessed và TotalObjects báo cáo các toán tử nội dung cấp cao từ mọi stream /Contents trang theo thứ tự nguồn
Progressive region rendering
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;
Bốn tọa độ vùng là các điểm không gian người dùng PDF với gốc dưới-trái và bitmap đầu ra bao phủ chính xác cửa sổ đó ở DPI được yêu cầu
Phiên tái sử dụng display list có cache, giữ trạng thái đồ họa và văn bản qua các lời gọi, và triệt tiêu các phần tô path, văn bản, ảnh, Form, và shading tốn kém có giới hạn thận trọng không giao với ROI
Toán tử trạng thái và tiến triển văn bản vẫn thực thi theo thứ tự nguồn, nên culling một mark sớm hơn không thể di chuyển hoặc tô lại màu một mark hiển thị muộn hơn
RegionVisiblePaintObjects và RegionCulledPaintObjects phơi bày lựa chọn display-list, trong khi dự trữ bộ nhớ đỉnh theo kích thước vùng thay vì toàn bộ trang
Progressive JPEG scans
Khi THotPDF.ProgressiveJPEGScanDecoding là true, một ảnh DCTDecode tiến bộ đủ điều kiện tiến thêm một scan JPEG mỗi lời gọi ContinueRender có giới hạn nên bitmap trực tiếp có thể hiển thị một bản xem trước thô sớm trước scan cuối
THotPDF.ProgressiveJPEGMaxScans giới hạn mỗi ảnh từ 1 đến 4096 scan, trong khi ngân sách byte giải mã tài liệu cũng bao phủ bitmap đầu ra được căn chỉnh
THPDFLoadedPageRenderSession.ProgressiveJPEGScansDecoded và THPDFLoadedPageRenderSession.ProgressiveJPEGImagesDecoded báo cáo số scan và ảnh đã hoàn tất; THPDFLoadedPageRenderSession.OnProgressiveJPEGScan nhận một THPDFProgressiveJPEGScanEvent sau mỗi scan nhìn thấy được và có thể hủy phiên
Unit HPDFJpeg cũng phơi bày THPDFJpegScanDecoder cho đầu vào THPDFJpegByteArray thô, với kết quả THPDFJpegScanDecodeStatus và một callback THPDFJpegCancellationCheck tùy chọn cho hủy bỏ cấp hàng
Đường dẫn tăng dần chấp nhận các phần tô ảnh JPEG DeviceRGB hoặc DeviceGray đầy đủ đích với độ mờ mặc định và không có mask, transfer function, halftone, overprint, hoặc trạng thái nhóm trong suốt; mọi phần tô khác dùng bộ giải mã ảnh đầy đủ để giữ ngữ nghĩa dựng
Vô hiệu hóa tùy chọn, yêu cầu cô lập codec, vượt giới hạn, hoặc gặp đầu vào sai định dạng cũng chọn đường dẫn ảnh đầy đủ mà không phơi bày một lần giải mã thất bại một phần
Progress callbacks
THPDFProgressiveRenderProgressEvent chạy sau mỗi toán tử đã hoàn tất và nhận số đã xử lý và tổng số cộng thời gian thực thi dựng đã trôi qua
Đặt tham số Cancel của callback thành true để kết thúc phiên đó ở prsCancelled mà không hủy token dùng chung
Một Form XObject, pattern, giải mã ảnh, hoặc thao tác lồng nhau khác thuộc về toán tử cấp cao bao quanh nó và có thể vượt một ngân sách thời gian nhỏ trước khi điều khiển trở lại
Operation-wide cancellation
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 an toàn luồng, một-lần, và do caller sở hữu; Cancel yêu cầu hủy bỏ vĩnh viễn và IsCancellationRequested phơi bày trạng thái
ThrowIfCancellationRequested ném EHPDFOperationCancelled và giữ tên thao tác trong OperationName
THotPDF.OperationCancellationToken áp dụng cho nạp, dựng đồng bộ, dựng tiến bộ không có token tường minh, OptimizeLoadedStreams, CreatePreflightReport, và ValidatePDFVT
SignPDFWithPFX và SignPDFWithSystemCertificate cung cấp các overload chấp nhận một token trực tiếp
Ownership and partial-result rules
- Tài liệu và token phải tồn tại lâu hơn mọi
THPDFLoadedPageRenderSessiontham chiếu chúng - Một lượt nạp bị hủy có thể được theo sau bởi một lượt nạp mới trên cùng instance tài liệu
- Tối ưu hóa stream là hợp tác thay vì giao dịch, nên các stream hoàn tất trước khi hủy vẫn được tối ưu hóa
- Một đích ký bị hủy có thể chứa đầu ra một phần và nên bị loại bỏ khi cần phân phối nguyên tử
- Một lời gọi provider khóa riêng Windows không thể bị gián đoạn an toàn, nên hủy bỏ được quan sát ngay trước và sau lời gọi đó