PDFium Delphi Component Docs

LoadCustomDocument Метод

Компонент: TPdf  ·  Модуль: PDFium
Загружает PDF из любого TStream с поддержкой позиционирования через блочный ридер PDFium, работающий по запросу, поэтому многогигабайтные документы и источники на удалённых ресурсах или в базе данных не требуют предварительной копии в памяти

Syntax

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

procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean; const Options: TPdfLoadOptions; out Report: TPdfLoadReport);

Description

LoadCustomDocument — потоковый аналог буферизованных перегрузок LoadDocument. Он опирается на точку входа PDFium FPDF_LoadCustomDocument через вспомогательный класс TPdfStreamAdapter, появившийся в v1.8.0. PDFium извлекает блоки из AStream только по мере необходимости, поэтому поток не копируется в память: TFileStream поверх PDF на 4 ГБ, TStream поверх HTTP или поток BLOB из базы данных становятся пригодны к работе без предварительного размещения всего содержимого в RAM

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

LoadCustomDocument намеренно сделан отдельным методом (а не ещё одной перегрузкой LoadDocument), чтобы вызывающий код, передающий подкласс TMemoryStream, не смог случайно привязаться к буферизованной перегрузке LoadDocument(TMemoryStream, Boolean) — форма аргументов в Pascal совпадает, но семантика совершенно разная (буферизация против чтения по запросу)

Перегрузка с политикой применяет то же совместимое, строгое или восстановительное поведение и ограниченный аудит xref, что задокументированы в LoadDocument. Аудит использует позиционные чтения и восстанавливает курсор источника, прежде чем PDFium продолжит доступ по запросу

TPdfLoadOptions несёт Mode, AuditByteLimit, MaxIssues, MaxXrefSections, MaxXrefEntries, MaxObjectNumber, ValidateObjectOffsets и RequireFinalEndOfFileMarker, а также классовую функцию Default

Remarks

Example

// 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;

See Also

LoadDocument, Active, Password, FileName