可選文件處理器

THPDFDocumentHandlerRegistry 在弱式副檔名或 MIME 提示之前依檢查的內容選取可取代的處理器,然後把選定的來源轉換成一個由匯出與轉譯共享的不可變 PDF 快取

內建可選處理器

預算與失敗隔離

單趟經過驗證的 ZIP 中央目錄掃描,會在轉換前強制執行項目數、壓縮位元組、展開位元組、單項、重複路徑、不安全路徑與壓縮比上限

經典 PKZIP ZipCrypto 項目可透過 ArchivePasswordCallback 請求憑證;callback 收到來源名稱、項目名稱與 1 起始的嘗試次數,而 MaxPasswordAttempts 把重試次數限制在 1 到 16

憑證與部分解碼的項目位元組只存在於記憶體,並在每次嘗試之間清除;每次 callback 前後都檢查取消狀態;缺少 callback、憑證被拒、重試耗盡或不支援的加密都以失敗收場

一次已驗證的 ZIP 中央目錄掃描在轉換之前強制項目、壓縮位元組、展開位元組、逐項目、加密、重複路徑、不安全路徑與壓縮比例限制

受密碼保護的項目要有 Delphi 12 或更新版本,其 System.Zip 才提供解密掛鉤;若以更早的 Delphi 版本建置,handler 仍能讀取未加密的項目,但會在呼叫 ArchivePasswordCallback 之前就把加密項目視為不支援而拒絕

大小或位移需要 ZIP64 欄位的項目,必須使用 Delphi 11 或更新版本;更早的 Delphi 版本會把它們視為不支援而拒絕

資源、重排、頁面、像素、DPI、輸出與取消限制在整個轉換與轉譯期間保持有效,而失敗的輸出發佈會還原可尋址的目標串流

註冊與使用

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;

相關 API