procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean = False);
procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean; const Options: TPdfLoadOptions; out Report: TPdfLoadReport);
LoadCustomDocument es la contraparte de transmisión por flujo de las sobrecargas almacenadas en búfer de LoadDocument. Se apoya en el punto de entrada FPDF_LoadCustomDocument de PDFium mediante la clase auxiliar TPdfStreamAdapter introducida en v1.8.0. PDFium extrae bloques de AStream solo cuando los necesita, de modo que el flujo no se copia a memoria: un TFileStream sobre un PDF de 4 GB, un TStream respaldado por HTTP o un flujo de BLOB de base de datos se vuelven utilizables sin cargar primero toda la carga útil en RAM
AStream debe admitir búsqueda. Su tiempo de vida debe extenderse hasta que el documento se cierre (llame a UnloadDocument o devuelva Active a False). Pase AOwnsStream = True para transferir a este TPdf la propiedad del flujo — el adaptador entonces libera AStream cuando se ejecuta UnloadDocument. Pase False cuando quien llama quiera mantener el flujo vivo después de cerrar el documento
LoadCustomDocument es intencionalmente un método separado (no otra sobrecarga de LoadDocument) para que quienes pasan una subclase de TMemoryStream no puedan enlazarse por accidente a la sobrecarga almacenada en búfer LoadDocument(TMemoryStream, Boolean) — la forma de los argumentos Pascal es idéntica, pero la semántica es muy distinta (almacenado en búfer frente a bajo demanda)
La sobrecarga con políticas aplica el mismo comportamiento compatible, estricto o de recuperación y la auditoría acotada de xref documentados por LoadDocument. La auditoría usa lecturas posicionadas y restaura el cursor de la fuente antes de que PDFium continúe su acceso bajo demanda
TPdfLoadOptions lleva Mode, AuditByteLimit, MaxIssues, MaxXrefSections, MaxXrefEntries, MaxObjectNumber, ValidateObjectOffsets y RequireFinalEndOfFileMarker, además de la función de clase Default
Password antes de llamar a LoadCustomDocument cuando abra documentos cifradosAStream — puede ser un TFileStream, un TMemoryStream o cualquier subclase de TStream que respete Seek y ReadAOwnsStream = 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;