function CreateXObjectFromPage(
Source : TPdf;
SourcePageIndex: Integer): TPdfXObject;
CreateXObjectFromPage fabrique un handle réutilisable qui permet à un TPdf de réutiliser une page d’un AUTRE TPdf comme estampille, filigrane ou superposition de modèle. En interne, il enveloppe FPDF_NewXObjectFromPage de PDFium et produit un objet Pascal TPdfXObject qui ferme automatiquement le handle FPDF_XOBJECT sous-jacent dans son destructeur, éliminant la cérémonie manuelle FPDF_CloseXObject
Associez-le à InsertFormObjectFromXObject pour déposer une instance de la page enveloppée dans la page courante de ce document. Chaque appel insère un FPDF_PAGEOBJECT frais qui peut être positionné, mis à l’échelle et pivoté via FPDFPageObj_SetMatrix et les aides TPdfMatrix — de sorte que le même XObject puisse être placé à plusieurs tailles / rotations / positions sur de nombreuses pages tout en partageant un seul cache de contenu de page
Renvoie nil en cas d’échec (Source non Active, SourcePageIndex invalide, OOM). Lève EPdfError lorsque Source est nil ou non Active
L’appelant possède le TPdfXObject renvoyé et DOIT le libérer avant la fermeture de CE TPdf. Le destructeur appelle FPDF_CloseXObject, qui détache proprement le handle de ce TPdf. Après insertion, l’objet de page inséré dans la page est possédé par la page, pas par l’XObject — fermer l’XObject n’invalide pas les objets de page déjà insérés
PageNumber de CE TPdf — définissez-le avant d’appeler InsertFormObjectFromXObjectPageNumber sur la destination est de base 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;