function InsertFormObjectFromXObject(XObject: TPdfXObject): FPDF_PAGEOBJECT;
InsertFormObjectFromXObject — это вторая половина API повторного использования Form XObject в v1.25.0. Он принимает дескриптор TPdfXObject (созданный через CreateXObjectFromPage) и вставляет ОДИН FPDF_PAGEOBJECT, который ссылается на этот XObject, на ТЕКУЩУЮ страницу ЭТОГО документа. Каждый вызов вставляет новый page object, поэтому один и тот же XObject можно ставить штампом несколько раз на нескольких страницах назначения — каждый штамп использует общий cache page content, что уменьшает размер файла даже когда watermark / template активно используется
Возвращаемый дескриптор FPDF_PAGEOBJECT позволяет вызвать FPDFPageObj_SetMatrix или helpers TPdfMatrix, чтобы позиционировать, масштабировать и поворачивать штамп в любом месте страницы. Без явного transform вставленная страница окажется в левом нижнем углу в масштабе 1:1, что почти никогда не нужно; всегда задавайте matrix перед вызовом UpdatePage
Возвращает nil при ошибке (XObject равен nil, этот TPdf не Active, нет текущей страницы). После вставки page object принадлежит странице, а не XObject — освобождение XObject не делает вставленный page object недействительным
PageNumber ЭТОГО TPdf. Сначала задайте PageNumber, затем вызовите InsertFormObjectFromXObjectUpdatePage, чтобы PDFium заново отрисовал page content streamFPDF_PAGEOBJECT в N content stream страниц, и все они указывают на единственное определение XObject — это намного дешевле, чем копировать базовое содержимое N раз
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;