function CreateXObjectFromPage(
Source : TPdf;
SourcePageIndex: Integer): TPdfXObject;
CreateXObjectFromPage fabbrica un handle riutilizzabile che permette a un
TPdf di riusare una pagina di UN ALTRO TPdf come timbro, watermark o
overlay di template. Internamente incapsula
FPDF_NewXObjectFromPage di PDFium e produce un oggetto Pascal
TPdfXObject che chiude l'handle sottostante
FPDF_XOBJECT automaticamente nel suo distruttore,
eliminando la cerimonia manuale di FPDF_CloseXObject
Accoppialo con InsertFormObjectFromXObject per inserire davvero
un'istanza della pagina incapsulata nella pagina corrente di questo
documento. Ogni chiamata inserisce un FPDF_PAGEOBJECT fresco che si può
posizionare, scalare e ruotare tramite
FPDFPageObj_SetMatrix e gli helper
TPdfMatrix — così lo stesso XObject può essere
piazzato a più dimensioni / rotazioni / posizioni su molte pagine
condividendo un'unica cache di contenuto pagina
Restituisce nil in caso di fallimento (Source non Active,
SourcePageIndex non valido, OOM). Solleva
EPdfError quando Source è nil
o non Active
Il chiamante è proprietario del TPdfXObject restituito e DEVE liberarlo
prima che QUESTO TPdf venga chiuso. Il distruttore chiama
FPDF_CloseXObject, che stacca l'handle da questo
TPdf in modo pulito. Dopo l'inserimento, l'oggetto di pagina inserito nella
pagina è di proprietà della pagina, non dell'XObject — chiudere
l'XObject non invalida gli oggetti di pagina già inseriti
PageNumber di QUESTO TPdf — impostalo prima di chiamare InsertFormObjectFromXObjectPageNumber sulla destinazione è a base uno
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;