procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean = False);
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).
Password antes de llamar a LoadCustomDocument al abrir documentos cifrados.AStream — puede ser un TFileStream, un TMemoryStream o cualquier subclase de TStream que respete Seek y Read.AOwnsStream = True.
// 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;