PDFium Delphi Component Docs

CreateXObjectFromPage Metodo

Componente: TPdf  ·  Unità: PDFium
Incapsula una pagina di un altro TPdf in un handle Form XObject riutilizzabile che può essere applicato in questo documento tutte le volte che serve

Syntax

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

Description

CreateXObjectFromPage fabbrica un handle riutilizzabile che permette a un TPdf di riusare una pagina di UN ALTRO TPdf come timbro, watermark o overlay di template. Internamente incapsula FPDF_NewXObjectFromPage di PDFium e produce un oggetto Pascal TPdfXObject che chiude l'handle sottostante FPDF_XOBJECT automaticamente nel suo distruttore, eliminando la cerimonia manuale di FPDF_CloseXObject

Accoppialo con InsertFormObjectFromXObject per inserire davvero un'istanza della pagina incapsulata nella pagina corrente di questo documento. Ogni chiamata inserisce un FPDF_PAGEOBJECT fresco che si può posizionare, scalare e ruotare tramite FPDFPageObj_SetMatrix e gli helper TPdfMatrix — così lo stesso XObject può essere piazzato a più dimensioni / rotazioni / posizioni su molte pagine condividendo un'unica cache di contenuto pagina

Restituisce nil in caso di fallimento (Source non Active, SourcePageIndex non valido, OOM). Solleva EPdfError quando Source è nil o non Active

Il chiamante è proprietario del TPdfXObject restituito e DEVE liberarlo prima che QUESTO TPdf venga chiuso. Il distruttore chiama FPDF_CloseXObject, che stacca l'handle da questo TPdf in modo pulito. Dopo l'inserimento, l'oggetto di pagina inserito nella pagina è di proprietà della pagina, non dell'XObject — chiudere l'XObject non invalida gli oggetti di pagina già inseriti

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