Custom Stream Filter Registry
HotPDF có thể giải mã các bộ lọc stream PDF do ứng dụng định nghĩa bên trong cùng pipeline có giới hạn được dùng bởi các bộ giải mã Flate, LZW, ASCII85, ASCIIHex, và RunLength tích hợp của nó
Đăng ký bộ lọc push hoặc pull
Triển khai IHPDFCustomStreamFilter, chọn csfmPush hoặc csfmPull, và đăng ký giao diện qua THotPDF.RegisterCustomStreamFilter
Tên được khớp không phân biệt hoa thường mà không có dấu gạch chéo đầu, đăng ký trùng lặp là tường minh, tên tích hợp không thể thay thế, và mỗi tài liệu chấp nhận tối đa 64 tên tùy chỉnh
Tra cứu registry giữ một ảnh chụp giao diện dưới một critical section ngắn; callback bộ lọc và hủy giao diện chạy bên ngoài khóa registry
Một ngân sách cho mọi giai đoạn
Đầu ra tùy chỉnh tiêu thụ DecodeBudgetBytes và DocumentDecodeBudgetBytes qua bộ theo dõi tổng hợp hiện có, nên một chuỗi hỗn hợp tùy chỉnh và tích hợp không thể đặt lại việc hạch toán mở rộng giữa các giai đoạn
THPDFCustomStreamFilterRequest.MaxOutputBytes báo cáo khoản cho phép theo chuỗi còn lại, trong khi giá trị không nghĩa là ngân sách theo chuỗi đã cấu hình là không giới hạn
Yêu cầu cũng cung cấp tên bộ lọc PDF đã giải mã, chỉ mục giai đoạn bắt đầu từ 0, độ sâu pipeline, kích thước đầu vào khi có sẵn, và token hủy bỏ của caller
Hợp đồng hủy bỏ và seek
Overload DecodeLoadedStreamToStream nhận biết hủy bỏ kiểm tra trước và sau khi thực thi tùy chỉnh và trong lúc chuyển pull-stream
Triển khai tùy chỉnh nên kiểm tra Request.CancellationToken bên trong vòng lặp push dài hoặc công việc ngoài bị chặn
csscSeekable khai báo rằng đầu vào mượn, đích push, hoặc pull stream được trả về phải hỗ trợ seek; vi phạm hợp đồng tạo ra dpsSeekContractViolation
Cô lập lỗi
Mỗi giai đoạn tùy chỉnh ghi vào một THPDFAdaptiveTempStream có giới hạn trước khi bất kỳ byte nào được xuất bản cho giai đoạn kế tiếp hoặc đích của caller
Một kết quả false, ngoại lệ, hủy bỏ, vi phạm seek, hoặc lỗi ngân sách loại bỏ đầu ra tạm thời đó và trả về một trạng thái pipeline có kiểu mà không làm rò rỉ ngoại lệ tùy chỉnh qua ranh giới giải mã công khai
Một pull filter thành công chuyển quyền sở hữu stream được trả về của nó cho HotPDF; trả về đầu vào mượn hoặc một stream nil bị từ chối
Đo lường
GetCustomStreamFilterStatistics báo cáo tên đã đăng ký, số lần thử push và pull, thành công, lỗi, hủy bỏ và số lần vi phạm seek, byte đầu vào và tạo ra tổng hợp, cùng tên và chẩn đoán mới nhất
THPDFDecodePipelineInfo.CustomFilterCount và CustomFilterFailureCount mô tả chuỗi hiện tại
Ví dụ
Filter := TApplicationFilter.Create;
PDF.RegisterCustomStreamFilter(Filter);
try
if not PDF.DecodeLoadedStreamToStream(StreamObject, Output,
CancellationToken, Info) then
HandleDecodeFailure(Info.Status, Info.Diagnostic);
finally
PDF.UnregisterCustomStreamFilter(Filter.FilterName);
end;