function CreateXObjectFromPage(
Source : TPdf;
SourcePageIndex: Integer): TPdfXObject;
CreateXObjectFromPage produceert een herbruikbare handle die de
ene TPdf een pagina van een ANDERE TPdf laat hergebruiken als stempel,
watermerk of sjabloonoverlay. Intern pakt het PDFium's
FPDF_NewXObjectFromPage in en produceert het een
TPdfXObject Pascal-object dat de onderliggende
FPDF_XOBJECT-handle automatisch sluit in zijn destructor,
waardoor handmatige FPDF_CloseXObject-verplichting verdwijnt.
Combineer het met InsertFormObjectFromXObject om
daadwerkelijk één instantie van de verpakte pagina in de huidige pagina
van dit document te plaatsen. Elke aanroep voegt een verse
FPDF_PAGEOBJECT in die kan worden gepositioneerd, geschaald en geroteerd
via FPDFPageObj_SetMatrix en de
TPdfMatrix-hulpmiddelen — zodat hetzelfde XObject op
meerdere formaten / rotaties / posities over veel pagina's kan worden
geplaatst terwijl één pagina-inhoudscache wordt gedeeld.
Geeft nil terug bij mislukking (Source niet Active,
ongeldige SourcePageIndex, OOM). Geeft
EPdfError wanneer Source nil is
of niet Active is.
De aanroeper is eigenaar van de teruggegeven TPdfXObject
en MOET deze vrijgeven voordat DEZE TPdf wordt gesloten. De destructor
roept FPDF_CloseXObject aan, dat de handle netjes van deze
TPdf ontkoppelt. Na invoegen is het in de pagina ingevoegde paginaobject
in eigendom van de pagina, niet van het XObject — het sluiten van
het XObject maakt reeds ingevoegde paginaobjecten niet ongeldig.
PageNumber van DEZE TPdf — stel deze in voordat u InsertFormObjectFromXObject aanroept.PageNumber op de bestemming is op 1 gebaseerd.
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;