procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean = False);
procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean; const Options: TPdfLoadOptions; out Report: TPdfLoadReport);
LoadCustomDocument es la contraparte de streaming de las sobrecargas almacenadas en búfer de
LoadDocument. Se apoya en 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 los necesita, de modo que el
flujo no se copia en memoria: un TFileStream sobre un PDF de 4 GB,
un TStream respaldado en HTTP o un flujo BLOB de base de datos se vuelven todos
utilizables sin escalonar antes toda la carga útil en RAM
AStream debe admitir Seek. Su vida útil debe extenderse
hasta que el documento se cierre (llame a UnloadDocument o devuelva
Active a False). Pase
AOwnsStream = True para entregar 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 después de que el documento se cierre
LoadCustomDocument es intencionadamente un método separado (no otra
sobrecarga de LoadDocument) para que los llamadores que pasan una subclase de TMemoryStream
no puedan enlazar accidentalmente con la sobrecarga almacenada en búfer
LoadDocument(TMemoryStream, Boolean) — la forma de los argumentos Pascal es idéntica pero la semántica es muy
diferente (almacenado en búfer frente a bajo demanda)
La sobrecarga con política 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 transporta Mode, AuditByteLimit, MaxIssues, MaxXrefSections, MaxXrefEntries, MaxObjectNumber, ValidateObjectOffsets y RequireFinalEndOfFileMarker, además de la función de clase Default
Password antes de llamar a LoadCustomDocument al abrir 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;