PDFium Delphi Component 文件

選用性原生渲染

單元: PDFium
提供以能力閘門控制的 Skia 渲染,以及用於精確特別色版與疊印輸出的帶版本選用 ABI

Capability Queries

function GetSkiaRenderCapabilities: TPdfSkiaRenderCapabilities;
function GetPrintOutputCapabilities: TPdfPrintOutputCapabilities;

兩個查詢都會在必要時載入選定的 PDFium 模組,且只回報該確切模組中存在的匯出函式

缺少選用匯出函式絕不會妨礙正常的 PDFium 載入、點陣圖渲染、編輯或儲存

TPdfSkiaRenderCapabilities.PageSceneCache 表示 RenderPageSkiaByIndex 可以重用 TPdf 所擁有的有界已剖析頁面快取

TPdfSkiaRenderCapabilities.FormOverlay 表示獨立的選用表單匯出函式可以在頁面內容之後繪製表單覆蓋層

TPdfPrintOutputCapabilities.VersionCompatible 只有在延伸模組傳回完全相同的 PdfPrintOutputAbiVersion 值時才為 true

TPdfPrintOutputCapabilities.ExtensionPresent 在列印輸出延伸模組載入後為 true,AbiVersion 則攜帶它所回報的原始 ABI 編號

SpotPlateRendering、OverprintDetection 與 OverprintPreview 分別作為 RenderSpotPlate、PageUsesOverprint 與 RenderOverprintPreview 的啟用條件

Skia Page and Form Rendering

procedure TPdf.RenderPageSkia(Canvas: FPDF_SKIA_CANVAS; Width, Height: Integer; DrawFormOverlay: Boolean = True);
procedure TPdf.RenderPageSkiaByIndex(Canvas: FPDF_SKIA_CANVAS; PageNumber, Width, Height: Integer; DrawFormOverlay: Boolean = True);

呼叫端擁有原生 SkCanvas,並以 FPDF_SKIA_CANVAS 傳入

RenderPageSkia 繪製作用中頁面,RenderPageSkiaByIndex 則繪製任何以 1 為基底的頁面,且不改變 PageNumber

在有要求且存在表單填寫環境時,會透過獨立的選用表單匯出函式,在頁面內容之後繪製表單覆蓋層

原生 Skia API 只接受像素尺寸,不提供點陣圖渲染器的旋轉或旗標參數

function TPdf.SpotPlates: TPdfSpotPlateInfos;
function TPdf.PageUsesOverprint: Boolean;
function TPdf.RenderSpotPlate(PlateIndex, Width, Height: Integer; Rotation: TRotation = ro0; Options: TRenderOptions = []; Color: TColor = clWhite): TBitmap;
function TPdf.RenderOverprintPreview(Width, Height: Integer; Rotation: TRotation = ro0; Options: TRenderOptions = []; Color: TColor = clWhite): TBitmap;

只有當版本、能力位元與對應的函式匯出全部一致時,這些方法才會呼叫選用的列印輸出延伸模組

傳回的點陣圖由呼叫端擁有,並使用與一般渲染相同的有界 PDFium 點陣圖路徑

延伸模組不存在時,每個作業都會引發 EPdfError,而不是從 RGB 輸出模擬色版,或宣稱不準確的疊印行為

Print-output ABI version 1

ExportContract
PDFiumPas_GetPrintOutputAbiVersion以 32 位元無號值傳回 PdfPrintOutputAbiVersion
PDFiumPas_GetPrintOutputCapabilities傳回宣告的特別色列舉、特別色渲染、疊印偵測與疊印預視能力位元
PDFiumPas_PageCountSpotPlates為單一 FPDF_PAGE 傳回有界且非負的色版數
PDFiumPas_PageGetSpotPlateName傳回含結尾零位元組的 UTF-8 位元組數,且只在提供的緩衝區內寫入
PDFiumPas_PageUsesOverprint為單一頁面傳回 32 位元 FPDF_BOOL
PDFiumPas_RenderSpotPlate將單一以 0 為基底的色版渲染到呼叫端擁有的 FPDF_BITMAP
PDFiumPas_RenderOverprintPreview將色彩管理的疊印預視渲染到呼叫端擁有的 FPDF_BITMAP

所有 ABI 函式都使用 cdecl、32 位元整數與 FPDF_BOOL 值、指標大小的控制代碼,以及 PDFium 擁有的頁面語意

渲染函式必須同步完成,且不得保留提供的點陣圖或頁面控制代碼

未知的能力位元會保留在 RawCapabilityBits 中,但不被視為受支援的行為

Example

SkiaCaps := GetSkiaRenderCapabilities;
if SkiaCaps.PageRender then
  Pdf.RenderPageSkiaByIndex(SkCanvas, 1, 1200, 1600);

PrintCaps := GetPrintOutputCapabilities;
if PrintCaps.SpotPlateEnumeration then
  Plates := Pdf.SpotPlates;

See Also

TPdf.RenderPageByIndex, TPdf.ClearPageSceneCache