PDFium Delphi Component 文件

CreateXObjectFromPage 方法

元件: TPdf  ·  單元: PDFium
將另一個 TPdf 的頁面包裝成可重複使用的 Form XObject 控制代碼,可在此文件中任意次數套用

Syntax

function CreateXObjectFromPage(
  Source : TPdf;
  SourcePageIndex: Integer): TPdfXObject;

Description

CreateXObjectFromPage 會產生可重複使用的控制代碼,讓一個 TPdf 能將另一個 TPdf 的頁面當作戳記、浮水印或範本覆蓋層重複使用。它內部包裝 PDFium 的 FPDF_NewXObjectFromPage,並產生 TPdfXObject Pascal 物件,在其解構函式中自動關閉底層的 FPDF_XOBJECT 控制代碼,省去手動呼叫 FPDF_CloseXObject 的繁瑣步驟

搭配 InsertFormObjectFromXObject 即可將包裝頁面的一個實例實際放入此文件的目前頁面。每次呼叫都會插入一個全新的 FPDF_PAGEOBJECT,可透過 FPDFPageObj_SetMatrix 與 TPdfMatrix 輔助工具進行定位、縮放與旋轉 — 因此同一個 XObject 可在多個頁面上以多種大小/旋轉/位置放置,同時共用單一頁面內容快取

失敗時傳回 nil(Source 未作用、 SourcePageIndex 無效、OOM)。當 Source 為 nil 或未 Active 時會引發 EPdfError

呼叫端擁有傳回的 TPdfXObject,且必須在此 TPdf 關閉之前釋放它。解構函式會呼叫 FPDF_CloseXObject,乾淨地將控制代碼從此 TPdf 卸離。插入之後,放入頁面的頁面物件便由頁面擁有,而非由 XObject 擁有 — 關閉 XObject 不會使已插入的頁面物件失效

Remarks

Example

uses FPdfMatrix;

var
  Watermark: TPdf;
  XObj: TPdfXObject;
  PageObj: FPDF_PAGEOBJECT;
  M: TPdfMatrix;
  I: Integer;
begin
  Watermark := TPdf.Create(nil);
  try
    Watermark.FileName := 'C:\Confidential.pdf';
    Watermark.Active := True;
    XObj := Pdf1.CreateXObjectFromPage(Watermark, 0);
    try
      for I := 1 to Pdf1.PageCount do
      begin
        Pdf1.PageNumber := I;
        PageObj := Pdf1.InsertFormObjectFromXObject(XObj);
        if PageObj = nil then Continue;
        M := TPdfMatrix.Create;
        try
          M.Translate(100, 200);
          M.Scale(0.5, 0.5);
          FPDFPageObj_SetMatrix(PageObj, M.AsMatrix);
        finally
          M.Free;
        end;
        Pdf1.UpdatePage;
      end;
    finally
      XObj.Free;
    end;
  finally
    Watermark.Free;
  end;
end;

See Also

InsertFormObjectFromXObject, ImportPagesByIndex, AddPicture