function CreateXObjectFromPage(
Source : TPdf;
SourcePageIndex: Integer): TPdfXObject;
CreateXObjectFromPage tillverkar ett återanvändbart handtag som låter
en TPdf återanvända en sida från en ANNAN TPdf som stämpel, vattenmärke eller
mallöverlagring. Internt omsluter den PDFiums
FPDF_NewXObjectFromPage och producerar ett
TPdfXObject Pascal-objekt som stänger det underliggande
FPDF_XOBJECT-handtaget automatiskt i sin destruktor,
vilket eliminerar manuell FPDF_CloseXObject-ceremoni
Kombinera den med InsertFormObjectFromXObject för att faktiskt
släppa ner en instans av den omslutna sidan på detta dokuments aktuella
sida. Varje anrop infogar ett färskt FPDF_PAGEOBJECT som kan
positioneras, skalas och roteras via
FPDFPageObj_SetMatrix och
TPdfMatrix-hjälparna — så samma XObject kan
placeras med flera storlekar / rotationer / positioner över många sidor
samtidigt som den delar en enda sidinnehållscache
Returnerar nil vid fel (Source inte Active, ogiltigt
SourcePageIndex, OOM). Utlöser
EPdfError när Source är nil
eller inte Active
Anroparen äger det returnerade TPdfXObject och MÅSTE frigöra
det innan DENNA TPdf stängs. Destruktorn anropar
FPDF_CloseXObject, som lossar handtaget från denna
TPdf rent. Efter infogningen ägs sidobjektet som infogats i
sidan av sidan, inte av XObjectet — att stänga
XObjectet ogiltigförklarar inte redan infogade sidobjekt
PageNumber — ställ in den innan InsertFormObjectFromXObject anropasPageNumber på målet är ettbaserad
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;