可插拔頁面轉譯後端

HotPDF 可以把已載入頁面的點陣圖轉譯導向應用程式定義的後端,同時保留現有轉譯器作為零組態的預設與選用後備

內建原生後端

PDF.UseNativeGDIRenderBackend;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);

THPDFNativeGDIRenderBackend 透過與外部實作相同的公開後端契約,公開既有的 Windows 原生 GDI 轉譯器

它的能力宣告包含 prbcNative、prbcDeterministic、prbcTransparency、prbcColourManagement 與 prbcThreadSafe,不宣稱 prbcDeviceAcceleration

SIMD 掃描線後端

var
  Backend: IHPDFPageRenderBackend;
begin
  Backend := THPDFSIMDScanlineRenderBackend.Create;
  PDF.PageRenderBackend := Backend;
  Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
end;

THPDFSIMDScanlineRenderBackend 先預檢整份編譯後的顯示清單,再以 64 位元組批次與 16 位元組向量尾部,把支援的 DeviceRGB 或 DeviceGray 矩形填色直接寫進最終的 32 位元點陣圖表面

複合矩形路徑會以單一繪圖操作遵循 nonzero 或 even-odd 填色規則,保留鏤空、變換後的子路徑方向與已繪製的內容;光柵化會在有界批次中檢查取消狀態,並丟棄未完成的表面

後端接受圖形狀態的儲存與還原、正交縮放、平移與直角旋轉矩陣、填色變更、矩形、填色運算子與路徑重設;文字、任意路徑、描邊、影像、透明、裁切、圖樣、漸變、不支援的色彩空間與非正交變換都會在點陣圖配置前婉拒

它的能力宣告包含 prbcSIMD、prbcThreadSafe 與 prbcDeterministic,不宣稱裝置加速、透明或色彩管理

THPDFSIMDRenderBackendStatistics 回報直接表面、已轉譯矩形、向量區塊、純量尾部像素,以及需要後備時被拒絕的確切運算子

自訂後端契約

實作 IHPDFPageRenderBackend 並指派給 THotPDF.PageRenderBackend

THPDFPageRenderBackendRequest 提供要求的頁面索引與 DPI、編譯後的 THPDFPageDisplayList,以及用於串流、影像、字型、可選內容、色彩管理與取消的 THPDFRenderDocAccess 解析器

後端可透過 THPDFPageDisplayList.GetToken 檢視每個編譯後的運算子,不必重新解析頁面內容

回傳 True 並附上新配置的 TBitmap 即把點陣圖擁有權移交給 HotPDF;回傳 False 且不附點陣圖則表示婉拒該要求

並行與後備

宣告 prbcThreadSafe 的後端可透過兩條平行頁面轉譯管線同時執行

沒有該能力的後端會透過專屬呼叫鎖序列化,顯示清單編譯仍可並行

rbfpSoftwareFallback 會在後端不可用、婉拒或失敗時改用現有轉譯器重試,rbfpFail 則丟出 EHPDFRenderBackend

後端可選擇實作 IHPDFPageRenderBackendFailureInfo 或回傳每個要求的診斷原因,並行婉拒時仍能保留該次轉譯嘗試的原因

更換後端會使記憶體與持久化已轉譯頁面快取項目失效,不同轉譯器產生的影像絕不會混用

診斷與視覺閘

THPDFRenderBackendStatistics 回報嘗試數、成功數、失敗數、軟體後備次數、序列化呼叫數、耗時、後端名稱與最後失敗原因

內建的一致性測試檔使用重疊透明,並在 Win32 與 Win64 上對預設轉譯器宣告最大 Delta E 0、alpha 合成 RGB 誤差 0、相異像素數 0

相關 API