function InsertFormObjectFromXObject(XObject: TPdfXObject): FPDF_PAGEOBJECT;
InsertFormObjectFromXObject ist die zweite Hälfte der Form-
XObject-Wiederverwendungs-API aus v1.25.0. Sie nimmt ein TPdfXObject-Handle (gebaut
von CreateXObjectFromPage) und fügt EIN FPDF_PAGEOBJECT,
das dieses XObject referenziert, in die AKTUELLE Seite DIESES Dokuments ein. Jeder
Aufruf fügt ein neues Seitenobjekt ein, dasselbe XObject lässt sich also mehrfach
über mehrere Seiten des Ziels stempeln —
jeder Stempel teilt sich den zugrunde liegenden Seiteninhalt-Cache, was die
Dateigröße klein hält, selbst wenn Wasserzeichen / Template fleißig im Einsatz sind
Mit dem zurückgegebenen FPDF_PAGEOBJECT-Handle kann der Aufrufer
FPDFPageObj_SetMatrix oder die
TPdfMatrix-Helfer aufrufen, um den Stempel an beliebiger Stelle der Seite zu
positionieren / skalieren / drehen. Ohne explizite Transformation liegt das
eingefügte Objekt in der unteren linken Ecke bei 1:1-Skalierung, was
fast nie gewollt ist; immer eine Matrix setzen, bevor
UpdatePage aufgerufen wird
Liefert nil bei Fehlschlag (XObject ist nil, dieses TPdf
nicht Active, keine aktuelle Seite). Nach dem Einfügen gehört das Seitenobjekt
der Seite, nicht dem XObject — das Freigeben des XObjects
macht das eingefügte Seitenobjekt nicht ungültig
PageNumber DIESES TPdf identifiziert. Zuerst PageNumber setzen, dann InsertFormObjectFromXObject aufrufenUpdatePage aufrufen, damit PDFium den Seiteninhalt-Stream neu rendert
uses FPdfMatrix;
var
PageObj: FPDF_PAGEOBJECT;
M: TPdfMatrix;
begin
Pdf1.PageNumber := 3;
PageObj := Pdf1.InsertFormObjectFromXObject(XObj);
if PageObj <> nil then
begin
M := TPdfMatrix.Create;
try
M.Translate(100, 200);
M.Scale(0.5, 0.5);
M.Rotate(15);
FPDFPageObj_SetMatrix(PageObj, M.AsMatrix);
finally
M.Free;
end;
Pdf1.UpdatePage;
end;
end;