PDFium Component Docs

CreateXObjectFromPage metóda

Component: TPdf  ·  Unit: PDFium
Zabalí stranu z iného TPdf do znovupoužiteľného handle Form XObject, ktorý možno do tohto dokumentu raziť ľubovoľne veľakrát

Syntax

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

Description

CreateXObjectFromPage vytvorí opakovane použiteľný handle, ktorý umožňuje jednému TPdf znova použiť stranu z INÉHO TPdf ako pečiatku, vodoznak alebo prekrytie šablóny. Interne zabaľuje FPDF_NewXObjectFromPage PDFium a vytvára Pascal objekt TPdfXObject, ktorý zatvorí podkladový handle FPDF_XOBJECT automaticky vo svojom deštruktore, čím sa eliminuje manuálna ceremónia FPDF_CloseXObject.

Spárujte ho s InsertFormObjectFromXObject, aby ste skutočne vložili jednu inštanciu zabalenej strany do aktuálnej strany tohto dokumentu. Každé volanie vloží čerstvý FPDF_PAGEOBJECT, ktorý možno pozicovať, škálovať a otáčať prostredníctvom FPDFPageObj_SetMatrix a pomocníkov TPdfMatrix — takže rovnaký XObject možno umiestniť vo viacerých veľkostiach / rotáciách / pozíciách naprieč mnohými stranami pri zdieľaní jednej vyrovnávacej pamäte obsahu strany.

Vráti nil pri zlyhaní (Source nie je Active, neplatný SourcePageIndex, OOM). Vyvolá EPdfError, keď je Source nil alebo nie je Active.

Volajúci vlastní vrátený TPdfXObject a MUSÍ ho uvoľniť pred zatvorením TOHTO TPdf. Deštruktor volá FPDF_CloseXObject, ktorý čisto odpojí handle od tohto TPdf. Po vložení je objekt strany vložený do strany vlastnený stranou, nie XObjectom — zatvorenie XObjectu nezneplatní už vložené objekty strany.

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