function CreateXObjectFromPage(
Source : TPdf;
SourcePageIndex: Integer): TPdfXObject;
CreateXObjectFromPage vytvorí opakovane použiteľný handle, ktorý umožňuje jednému
TPdf znova použiť stranu z INÉHO TPdf ako pečiatku, vodoznak alebo
prekrytie šablóny. Interne zabaľuje
FPDF_NewXObjectFromPage PDFium a vytvára
Pascal objekt TPdfXObject, ktorý zatvorí podkladový
handle FPDF_XOBJECT automaticky vo svojom deštruktore,
čím sa eliminuje manuálna ceremónia FPDF_CloseXObject.
Spárujte ho s InsertFormObjectFromXObject, aby ste skutočne
vložili jednu inštanciu zabalenej strany do aktuálnej strany tohto
dokumentu. Každé volanie vloží čerstvý FPDF_PAGEOBJECT, ktorý možno
pozicovať, škálovať a otáčať prostredníctvom
FPDFPageObj_SetMatrix a pomocníkov
TPdfMatrix — takže rovnaký XObject možno
umiestniť vo viacerých veľkostiach / rotáciách / pozíciách naprieč mnohými stranami
pri zdieľaní jednej vyrovnávacej pamäte obsahu strany.
Vráti nil pri zlyhaní (Source nie je Active, neplatný
SourcePageIndex, OOM). Vyvolá
EPdfError, keď je Source nil
alebo nie je Active.
Volajúci vlastní vrátený TPdfXObject a MUSÍ ho uvoľniť
pred zatvorením TOHTO TPdf. Deštruktor volá
FPDF_CloseXObject, ktorý čisto odpojí handle od tohto
TPdf. Po vložení je objekt strany vložený do
strany vlastnený stranou, nie XObjectom — zatvorenie
XObjectu nezneplatní už vložené objekty strany.
PageNumber TOHTO TPdf — nastavte ho pred volaním InsertFormObjectFromXObject.PageNumber na cieli je jednoznačný.
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;