PDFium Component Docs

LoadCustomDocument method

Component: TPdf  ·  Unit: PDFium
Indlæser en PDF fra enhver søgbar TStream med PDFiums on-demand bloklæser, så flergigabyte-dokumenter og fjern- / databasestøttede kilder ikke kræver en fuld kopi i hukommelsen på forhånd

Syntax

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

Description

LoadCustomDocument er streaming-modstykket til de bufferede LoadDocument-overloads. Den bakkes af PDFiums FPDF_LoadCustomDocument-indgangspunkt gennem TPdfStreamAdapter-helperklassen introduceret i v1.8.0. PDFium trækker blokke fra AStream kun når nødvendigt, så streamen ikke kopieres ind i hukommelsen: en TFileStream over en 4 GB PDF, en HTTP-baggrund-TStream eller en database-BLOB-stream bliver alle brugbare uden at stage hele nyttelasten i RAM først.

AStream skal understøtte søgning. Dens levetid skal strække sig indtil dokumentet er lukket (kald UnloadDocument, eller sæt Active tilbage til False). Overfør AOwnsStream = True for at overdrage stream-ejerskab til denne TPdf — adapteren frigiver derefter AStream, når UnloadDocument kører. Overfør False, når kalderen ønsker at holde streamen i live efter dokumentet lukkes.

LoadCustomDocument er bevidst en separat metode (ikke endnu et LoadDocument-overload), så kaldere der overfører en TMemoryStream- subklasse ikke ved et uheld kan binde til den bufferede LoadDocument(TMemoryStream, Boolean)-overload — Pascal- argument-formen er identisk, men semantikken er meget forskellig (bufferet vs. on-demand).

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