function CreateXObjectFromPage(
Source : TPdf;
SourcePageIndex: Integer): TPdfXObject;
CreateXObjectFromPage memproduksi handle yang dapat digunakan ulang yang memungkinkan satu TPdf memakai ulang halaman dari TPdf LAIN sebagai cap, watermark, atau overlay template. Secara internal ini membungkus FPDF_NewXObjectFromPage milik PDFium dan menghasilkan objek Pascal TPdfXObject yang menutup handle FPDF_XOBJECT yang mendasari secara otomatis di destruktor-nya, menghilangkan upacara FPDF_CloseXObject manual
Padukan dengan InsertFormObjectFromXObject untuk benar-benar menjatuhkan satu instance halaman yang dibungkus ke halaman saat ini dari dokumen ini. Tiap panggilan menyisipkan FPDF_PAGEOBJECT baru yang dapat diposisikan, diskalakan, dan diputar melalui FPDFPageObj_SetMatrix dan helper TPdfMatrix — sehingga XObject yang sama dapat ditempatkan pada beberapa ukuran / rotasi / posisi di banyak halaman sambil berbagi satu cache konten-halaman
Mengembalikan nil saat kegagalan (Source tidak Active, SourcePageIndex tidak valid, OOM). Memunculkan EPdfError ketika Source bernilai nil atau tidak Active
Pemanggil memiliki TPdfXObject yang dikembalikan dan HARUS membebaskannya sebelum TPdf INI ditutup. Destruktor memanggil FPDF_CloseXObject, yang melepaskan handle dari TPdf ini dengan bersih. Setelah penyisipan, objek halaman yang disisipkan ke halaman dimiliki oleh halaman, bukan oleh XObject — menutup XObject tidak membatalkan objek halaman yang sudah disisipkan
PageNumber TPdf INI — setel sebelum memanggil InsertFormObjectFromXObjectPageNumber pada tujuan berbasis satu
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;