PDFium Delphi Component Docs

CreateXObjectFromPage 메서드

컴포넌트: TPdf  ·  유닛: PDFium
다른 TPdf의 page를 이 문서에 여러 번 찍어 넣을 수 있는 재사용 가능한 Form XObject handle로 감쌉니다

Syntax

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

Description

CreateXObjectFromPage는 한 TPdf가 다른 TPdf의 페이지를 스탬프, 워터마크, 템플릿 오버레이로 재사용할 수 있게 해 주는 재사용 가능한 핸들을 만들어 냅니다. 내부적으로는 PDFium의 FPDF_NewXObjectFromPage를 감싸며, 소멸자에서 기반 FPDF_XOBJECT 핸들을 자동으로 닫는 TPdfXObject Pascal 객체를 만들어 주므로 FPDF_CloseXObject를 직접 부를 필요가 없습니다

감싼 페이지의 인스턴스 하나를 이 문서의 현재 페이지에 실제로 얹으려면 InsertFormObjectFromXObject와 짝지어 쓰세요. 호출할 때마다 새 FPDF_PAGEOBJECT가 삽입되며 FPDFPageObj_SetMatrix와 TPdfMatrix 헬퍼로 위치, 크기, 회전을 바꿀 수 있습니다 — 그래서 같은 XObject를 여러 페이지에서 서로 다른 크기 / 회전 / 위치로 놓으면서도 하나의 페이지 콘텐츠 캐시를 공유할 수 있습니다

실패하면(Source가 Active가 아님, 잘못된 SourcePageIndex, OOM) nil을 반환합니다 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