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