function CreateXObjectFromPage(
Source : TPdf;
SourcePageIndex: Integer): TPdfXObject;
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를 닫아도
이미 삽입된 페이지 객체는 무효화되지 않습니다
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;