Optional Document Handlers

THPDFDocumentHandlerRegistry chọn các handler thay thế được theo nội dung đã kiểm tra trước khi dùng các gợi ý phần mở rộng yếu hoặc MIME, sau đó chuyển nguồn đã chọn thành một cache PDF bất biến dùng chung cho xuất và dựng

Built-in optional handlers

Budgets and failure isolation

Một lượt quét central-directory ZIP đã xác thực áp các giới hạn mục, byte nén, byte giãn nở, theo từng mục, đường dẫn trùng, đường dẫn nguy hiểm và tỉ lệ nén trước khi chuyển đổi

Các mục ZipCrypto PKZIP kiểu cũ có thể xin credential qua ArchivePasswordCallback ; callback nhận tên nguồn, tên mục và số lần thử tính từ 1, còn MaxPasswordAttempts giới hạn số lần thử lại từ 1 đến 16

Credential và các byte mục đã giải mã một phần được giữ trong bộ nhớ và xóa giữa các lần thử, hủy được kiểm tra trước và sau mỗi callback, còn callback thiếu, credential bị từ chối, lần thử cạn kiệt hoặc mã hóa không hỗ trợ đều fail closed

ZipCrypto là bảo vệ bằng mật khẩu kiểu cũ chứ không phải mã hóa có xác thực hiện đại, và quy ước byte mật khẩu không-ASCII có thể khác nhau giữa các nhà sản xuất ZIP

Các mục được bảo vệ bằng mật khẩu cần Delphi 12 trở lên, thứ mà System.Zip của nó cung cấp hook giải mã; khi được build với phiên bản Delphi cũ hơn, các handler vẫn đọc được các mục không mã hóa nhưng từ chối các mục mã hóa như không được hỗ trợ trước khi ArchivePasswordCallback được gọi

Các mục mà kích thước hoặc offset cần đến trường ZIP64 đòi hỏi Delphi 11 trở lên; các phiên bản Delphi cũ hơn từ chối chúng như không được hỗ trợ

Các giới hạn tài nguyên, reflow, trang, pixel, DPI, đầu ra, và hủy bỏ vẫn hoạt động suốt quá trình chuyển đổi và dựng, trong khi xuất bản đầu ra thất bại khôi phục một stream đích có thể tìm kiếm

Registration and use

var
  Registry: THPDFDocumentHandlerRegistry;
  Options: THPDFDocumentHandlerOptions;
  Handled: IHPDFHandledDocument;
  Info: THPDFDocumentHandlerInfo;
begin
  Registry:= THPDFDocumentHandlerRegistry.Create;
  try
    Registry.RegisterStandardHandlers;
    Options:= THPDFDocumentHandlerOptions.Default;
    if Registry.OpenFromFile('book.epub', '', Options, Handled, Info) then
      Handled.WritePDF(OutputStream, Options, Info);
  finally
    Registry.Free;
  end;
end;

Các API liên quan