PDFium Delphi Component Docs

CreateXObjectFromPage Método

Componente: TPdf  ·  Unidade: PDFium
Encapsula uma página de outro TPdf como um handle reutilizável de Form XObject que pode ser aplicado neste documento quantas vezes forem necessárias

Syntax

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

Description

CreateXObjectFromPage fabrica um handle reutilizável que permite a um TPdf reutilizar uma página de OUTRO TPdf como carimbo, marca d'água ou sobreposição de modelo. Internamente, encapsula o FPDF_NewXObjectFromPage do PDFium e produz um objeto Pascal TPdfXObject que fecha o handle FPDF_XOBJECT subjacente automaticamente em seu destrutor, eliminando a cerimônia manual de FPDF_CloseXObject.

Combine-o com InsertFormObjectFromXObject para efetivamente soltar uma instância da página encapsulada na página atual deste documento. Cada chamada insere um novo FPDF_PAGEOBJECT que pode ser posicionado, escalado e rotacionado por meio de FPDFPageObj_SetMatrix e dos auxiliares de TPdfMatrix — assim, o mesmo XObject pode ser colocado em múltiplos tamanhos / rotações / posições ao longo de muitas páginas enquanto compartilha um único cache de conteúdo de página.

Retorna nil em caso de falha (Source não ativo, SourcePageIndex inválido, OOM). Gera EPdfError quando Source é nil ou não está Active.

O chamador é proprietário do TPdfXObject retornado e DEVE liberá-lo antes que ESTE TPdf seja fechado. O destrutor chama FPDF_CloseXObject, que desanexa o handle deste TPdf de forma limpa. Após a inserção, o objeto de página inserido na página pertence à página, não ao XObject — fechar o XObject não invalida objetos de página já inseridos.

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