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