PDFium Component Docs

LoadCustomDocument Método

Componente: TPdf  ·  Unidad: PDFium
Carga un PDF desde cualquier TStream posicionable mediante el lector de bloques bajo demanda de PDFium, de modo que los documentos de varios GB y los orígenes remotos o respaldados por base de datos no necesiten una copia previa en memoria

Syntax

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

Description

LoadCustomDocument es la contrapartida de streaming de las sobrecargas almacenadas en búfer de LoadDocument. Está respaldada por el punto de entrada FPDF_LoadCustomDocument de PDFium a través de la clase auxiliar TPdfStreamAdapter introducida en v1.8.0 PDFium extrae bloques de AStream solo cuando se necesitan, de modo que el flujo no se copia en memoria: un TFileStream sobre un PDF de 4 GB, un TStream respaldado por HTTP o un flujo BLOB de base de datos se vuelven utilizables sin preparar antes toda la carga en RAM.

AStream debe admitir posicionamiento. Su vida útil debe extenderse hasta que el documento se cierre (llame a UnloadDocument o restablezca Active a False). Pase AOwnsStream = True para transferir la propiedad del flujo a este TPdf — el adaptador entonces libera AStream cuando se ejecuta UnloadDocument. Pase False cuando el llamador quiera mantener el flujo vivo tras cerrar el documento.

LoadCustomDocument es deliberadamente un método separado (no otra sobrecarga de LoadDocument) para que los llamadores que pasan una subclase de TMemoryStream no se enlacen accidentalmente a la sobrecarga almacenada en búfer LoadDocument(TMemoryStream, Boolean) — la forma del argumento Pascal es idéntica, pero la semántica es muy distinta (en búfer frente a bajo demanda).

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