PDFium Delphi Component Docs

метод LoadCustomDocument

Компонент: TPdf  ·  Модул: PDFium
Зарежда PDF от произволен TStream с възможност за позициониране чрез block reader-а на PDFium, работещ при поискване, така че многогигабайтови документи и отдалечени / базирани на база данни източници не се нуждаят от предварително копие в паметта

Синтаксис

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

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

Описание

LoadCustomDocument е потоковият двойник на буферираните LoadDocument претоварвания. Основата му е входната точка FPDF_LoadCustomDocument на PDFium, достъпна чрез помощния клас TPdfStreamAdapter, въведен във v1.8.0. PDFium издърпва блокове от AStream едва когато са нужни, така че потокът не се копира в паметта: TFileStream върху 4 GB PDF, TStream върху HTTP или BLOB поток от база данни стават използваеми, без първо да се побере целият payload в 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, плюс class function-а Default

Забележки

Пример

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