function InsertFormObjectFromXObject(XObject: TPdfXObject): FPDF_PAGEOBJECT;
InsertFormObjectFromXObject ist die zweite Hälfte der
v1.25.0-API zur Wiederverwendung von Form-XObjects. Sie nimmt einen
TPdfXObject-Handle (erzeugt durch
CreateXObjectFromPage) entgegen und fügt EINE
FPDF_PAGEOBJECT ein, die auf dieses XObject verweist,
und zwar in die AKTUELLE Seite dieses Dokuments. Jeder Aufruf fügt
ein neues Seitenobjekt ein, sodass dasselbe XObject mehrfach über
mehrere Zielseiten gestempelt werden kann — jeder Stempel teilt
sich den zugrunde liegenden Seitentext-Cache, was die Dateigröße
auch bei stark genutztem Wasserzeichen / Template klein hält
Der zurückgegebene FPDF_PAGEOBJECT-Handle erlaubt es
dem Aufrufer, mit FPDFPageObj_SetMatrix oder den
TPdfMatrix-Hilfen den Stempel auf der Seite zu
positionieren / skalieren / drehen. Ohne explizite Transformation
liegt die eingefügte Seite unten links bei 1:1-Skalierung, was fast
nie erwünscht ist; setzen Sie vor UpdatePage immer eine
Matrix
Gibt bei Fehlern nil zurück (XObject ist nil, dieses
TPdf ist nicht Active, keine aktuelle Seite). Nach dem
Einfügen gehört das Seitenobjekt der Seite und nicht dem XObject
— das Freigeben des XObject macht das eingefügte Seitenobjekt
nicht ungültig
PageNumber identifiziert. Setzen Sie zuerst PageNumber und rufen Sie dann InsertFormObjectFromXObject aufUpdatePage nach dem Positionieren des Stempels auf, damit PDFium den Seiteninhalt neu rendertFPDF_PAGEOBJECT-Referenzen in N Seiteninhaltsströmen, die alle auf dieselbe XObject-Definition zeigen — deutlich günstiger als das N-fache Kopieren des zugrunde liegenden Inhalts
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;