PDFium Component Docs

CreateXObjectFromPage Metoda

Ten wpis API zachowuje identyfikatory, sygnatury, bloki kodu i terminy PDF w oryginalnej postaci.
Komponent: TPdf  ·  Moduł: PDFium
Opakowuje stronę z innego TPdf jako wielokrotnego użytku uchwyt Form XObject, który można stemplować do tego dokumentu dowolną liczbę razy

Składnia

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

Opis

CreateXObjectFromPage tworzy wielokrotnego użytku uchwyt, który pozwala jednemu TPdf użyć strony z INNEGO TPdf jako stempla, znaku wodnego albo nakładki szablonu Wewnątrz opakowuje FPDF_NewXObjectFromPage z PDFium i tworzy obiekt Pascal TPdfXObject, który automatycznie zamyka bazowy uchwyt FPDF_XOBJECT w destruktorze, eliminując ręczną obsługę FPDF_CloseXObject

Połącz go z InsertFormObjectFromXObject, aby rzeczywiście wstawić jedną instancję opakowanej strony na bieżącą stronę tego dokumentu Każde wywołanie dodaje świeży FPDF_PAGEOBJECT, który można pozycjonować, skalować i obracać przez FPDFPageObj_SetMatrix oraz pomocniki TPdfMatrix — dzięki temu ten sam XObject może być umieszczany w wielu rozmiarach, obrotach i pozycjach na wielu stronach przy współdzieleniu jednej pamięci podręcznej zawartości strony

Zwraca nil w razie niepowodzenia (Source nie jest Active, nieprawidłowy SourcePageIndex, OOM) Zgłasza EPdfError, gdy Source jest nil albo nie ma wartości Active

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

Uwagi

Przykład

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;

Zobacz też

InsertFormObjectFromXObject, ImportPagesByIndex, AddPicture