function InsertFormObjectFromXObject(XObject: TPdfXObject): FPDF_PAGEOBJECT;
InsertFormObjectFromXObject е втората половина на API за преизползване на Form
XObject от v1.25.0. Той приема манипулатор TPdfXObject (изграден
от CreateXObjectFromPage) и вмъква ЕДИН FPDF_PAGEOBJECT,
който реферира този XObject, в ТЕКУЩАТА страница на ТОЗИ документ. Всяко
извикване вмъква нов page обект, така че същият XObject може да бъде
щампован многократно върху множество страници на целевия документ —
всяка щампа споделя основния кеш на съдържанието на страницата, което държи
размера на файла малък, дори когато водният знак / шаблонът е натоварен
Върнатият манипулатор FPDF_PAGEOBJECT позволява на извикващия
да извика FPDFPageObj_SetMatrix или помощните средства на
TPdfMatrix, за да позиционира / мащабира / завърти
щампата навсякъде по страницата. Без изрична трансформация
вмъкнатата страница седи в долния ляв ъгъл в мащаб 1:1, което
почти никога не е желаното; винаги задавайте матрица, преди да извикате
UpdatePage
Връща nil при неуспех (XObject е nil, този TPdf
не е Active, няма текуща страница). След вмъкването page обектът е
в собственост на страницата, а не на XObject — освобождаването на XObject
не обезсмисля вмъкнатия page обект
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;