function CreateXObjectFromPage(
Source : TPdf;
SourcePageIndex: Integer): TPdfXObject;
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 不會使已插入的頁面物件失效
PageNumber 識別 — 請在呼叫 InsertFormObjectFromXObject 之前先設定它PageNumber 則以 1 為基底
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;