PDFium Delphi Component Docs

CreateXObjectFromPage Método

Componente: TPdf  ·  Unidad: PDFium
Envuelve una página de otro TPdf como un identificador reutilizable de Form XObject que se puede estampar en este documento cuantas veces haga falta

Syntax

function CreateXObjectFromPage(
  Source : TPdf;
  SourcePageIndex: Integer): TPdfXObject;

Description

CreateXObjectFromPage fabrica un identificador reutilizable que permite a un TPdf reutilizar una página de OTRO TPdf como sello, marca de agua o superposición de plantilla. Internamente envuelve FPDF_NewXObjectFromPage de PDFium y produce un objeto Pascal TPdfXObject que cierra el identificador FPDF_XOBJECT subyacente automáticamente en su destructor, eliminando la ceremonia manual de FPDF_CloseXObject

Combínelo con InsertFormObjectFromXObject para realmente depositar una instancia de la página envuelta en la página actual de este documento. Cada llamada inserta un FPDF_PAGEOBJECT nuevo que puede posicionarse, escalarse y rotarse mediante FPDFPageObj_SetMatrix y los auxiliares de TPdfMatrix — de modo que el mismo XObject pueda colocarse en múltiples tamaños / rotaciones / posiciones a lo largo de muchas páginas compartiendo una sola caché de contenido de página

Devuelve nil en caso de falla (Source no está Active, SourcePageIndex no válido, OOM). Genera EPdfError cuando Source es nil o no está Active

El llamador es propietario del TPdfXObject devuelto y DEBE liberarlo antes de que ESTE TPdf se cierre. El destructor llama a FPDF_CloseXObject, lo que desvincula limpiamente el identificador de este TPdf. Después de la inserción, el objeto de página insertado en la página pertenece a la página, no al XObject — cerrar el XObject no invalida los objetos de página ya insertados

Remarks

Example

uses FPdfMatrix;

var
  Watermark: TPdf;
  XObj: TPdfXObject;
  PageObj: FPDF_PAGEOBJECT;
  M: TPdfMatrix;
  I: Integer;
begin
  Watermark := TPdf.Create(nil);
  try
    Watermark.FileName := 'C:\Confidential.pdf';
    Watermark.Active := True;
    XObj := Pdf1.CreateXObjectFromPage(Watermark, 0);
    try
      for I := 1 to Pdf1.PageCount do
      begin
        Pdf1.PageNumber := I;
        PageObj := Pdf1.InsertFormObjectFromXObject(XObj);
        if PageObj = nil then Continue;
        M := TPdfMatrix.Create;
        try
          M.Translate(100, 200);
          M.Scale(0.5, 0.5);
          FPDFPageObj_SetMatrix(PageObj, M.AsMatrix);
        finally
          M.Free;
        end;
        Pdf1.UpdatePage;
      end;
    finally
      XObj.Free;
    end;
  finally
    Watermark.Free;
  end;
end;

See Also

InsertFormObjectFromXObject, ImportPagesByIndex, AddPicture