PDFium Delphi Component Docs

CreateXObjectFromPage Método

Componente: TPdf  ·  Unidad: PDFium
Envuelve una página de otro TPdf como un manejador Form XObject reutilizable que puede estamparse en este documento tantas veces como sea necesario

Syntax

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

Description

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

Combínelo con InsertFormObjectFromXObject para colocar realmente 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 a través de FPDFPageObj_SetMatrix y los auxiliares de TPdfMatrix, de modo que el mismo XObject pueda colocarse en múltiples tamaños / rotaciones / posiciones en muchas páginas mientras comparte una sola caché de contenido de página

Devuelve nil en caso de fallo (Source no activo, SourcePageIndex no válido, falta de memoria). Genera EPdfError cuando Source es nil o no está Active

El llamador es propietario del TPdfXObject devuelto y DEBE liberarlo antes de que se cierre ESTE TPdf. El destructor llama a FPDF_CloseXObject, que desacopla el manejador de este TPdf limpiamente. Después de la inserción, el objeto de página insertado en la página es propiedad de la página, no del 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