PDFium Delphi Component Docs

CreateXObjectFromPage メソッド

コンポーネント: TPdf  ·  ユニット: PDFium
別の TPdf の page を、何度でもこの文書に stamp できる再利用可能な Form XObject handle として包みます

Syntax

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

Description

CreateXObjectFromPage は再利用可能なハンドルを作り出し、1 つの TPdf が「別の」TPdf のページを stamp、watermark、テンプレート overlay として使い回せるようにします。内部では PDFium の FPDF_NewXObjectFromPage をラップし、デストラクターで基底の FPDF_XOBJECT ハンドルを自動的に閉じる TPdfXObject の Pascal オブジェクトを生成するため、FPDF_CloseXObject を手動で呼ぶ儀式から解放されます

実際にラップしたページのインスタンスをこのドキュメントの現在ページへ落とし込むには、InsertFormObjectFromXObject と組み合わせます。呼び出しごとに新しい FPDF_PAGEOBJECT が挿入され、FPDFPageObj_SetMatrix と TPdfMatrix ヘルパーで位置・拡大率・回転を制御できます。同じ XObject を単一のページコンテンツキャッシュを共有したまま、複数ページにわたっていろいろなサイズ / 回転 / 位置で置けるわけです

失敗時は nil を返します(Source が Active でない、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