Документация PDFiumPas

LoadCustomDocument Метод

Эта запись API сохраняет идентификаторы, сигнатуры, блоки кода и термины PDF в исходном виде.
Компонент: TPdf  ·  Модуль: PDFium
Загружает PDF из любого seekable TStream, используя on-demand block reader PDFium, так что документы на несколько GB и удаленные или основанные на базе данных источники не требуют предварительного копирования в память

Синтаксис

procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean = False);

Описание

LoadCustomDocument — streaming counterpart buffered overloads LoadDocument. Он основан на точке входа PDFium FPDF_LoadCustomDocument через helper class TPdfStreamAdapter, введенный в v1.8.0. PDFium забирает блоки из AStream только когда они нужны, поэтому stream не копируется в memory: TFileStream поверх PDF на 4 GB, HTTP-backed TStream или database BLOB stream становятся пригодными без предварительной раскладки всего payload в RAM

AStream должен поддерживать seeking. Его lifetime должен длиться до закрытия документа (вызовите UnloadDocument или верните Active в False). Передайте AOwnsStream = True, чтобы передать ownership stream этому TPdf — тогда adapter освобождает AStream, когда выполняется UnloadDocument. Передавайте False, когда вызывающий код хочет сохранить stream живым после закрытия документа

LoadCustomDocument намеренно является отдельным методом, а не еще одной overload LoadDocument, чтобы вызывающие коды, передающие подкласс TMemoryStream, случайно не связались с buffered overload LoadDocument(TMemoryStream, Boolean) — форма аргументов в Pascal одинакова, но semantics очень разные (buffered vs. on-demand)

Примечания

Пример

// Streaming load with stream ownership transferred to Pdf1
var
  Stream: TFileStream;
begin
  Stream := TFileStream.Create('C:\Huge.pdf', fmOpenRead or fmShareDenyWrite);
  Pdf1.LoadCustomDocument(Stream, True); // Pdf1 frees Stream on UnloadDocument
  Pdf1.Active := True;
  ShowMessage('Pages: ' + IntToStr(Pdf1.PageCount));
end;

// Externally-owned stream — caller frees it after UnloadDocument
var
  Stream: TFileStream;
begin
  Stream := TFileStream.Create('C:\Live.pdf', fmOpenRead or fmShareDenyNone);
  try
    Pdf1.LoadCustomDocument(Stream, False);
    Pdf1.Active := True;
    DoWork;
    Pdf1.Active := False;
  finally
    Stream.Free;
  end;
end;

См. также

LoadDocument, Active, Password, FileName