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;

API liên quan