PDFium Component Docs

CreateXObjectFromPage Metoda

Component: TPdf  ·  Unit: PDFium
Opakowuje stronę z innego TPdf jako wielokrotnego użytku uchwyt Form XObject, który można stemplować do tego dokumentu dowolną liczbę razy

Syntax

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

Description

CreateXObjectFromPage wytwarza uchwyt wielokrotnego użytku, który pozwala jednemu TPdf ponownie użyć strony z INNEGO TPdf jako stempel, znak wodny lub nakładkę szablonu. Wewnętrznie opakowuje FPDF_NewXObjectFromPage z PDFium i tworzy obiekt Pascala TPdfXObject, który zamyka bazowy uchwyt FPDF_XOBJECT automatycznie w swoim destruktorze, eliminując ręczne wywoływanie FPDF_CloseXObject

Połącz go z InsertFormObjectFromXObject, aby faktycznie umieścić jedną instancję opakowanej strony na bieżącej stronie tego dokumentu. Każde wywołanie wstawia nowy FPDF_PAGEOBJECT, który można pozycjonować, skalować i obracać przez FPDFPageObj_SetMatrix i pomocników TPdfMatrix — dzięki temu ten sam XObject może być umieszczany w wielu rozmiarach / rotacjach / położeniach na wielu stronach, współdzielając jedną pamięć podręczną zawartości strony

Zwraca nil w przypadku niepowodzenia (Source nieaktywne, nieprawidłowy SourcePageIndex, OOM). Zgłasza EPdfError, gdy Source ma wartość nil lub nie jest Active

Wywołujący jest właścicielem zwróconego TPdfXObject i MUSI go zwolnić przed zamknięciem TEGO TPdf. Destruktor wywołuje FPDF_CloseXObject, co czysto odłącza uchwyt od tego TPdf. Po wstawieniu obiekt strony umieszczony na stronie należy do strony, a nie do XObject — zamknięcie XObject nie unieważnia już wstawionych obiektów strony

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