procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean = False);
procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean; const Options: TPdfLoadOptions; out Report: TPdfLoadReport);
LoadCustomDocument è la controparte in streaming degli overload bufferizzati di
LoadDocument. È basato sul punto di ingresso
FPDF_LoadCustomDocument di PDFium tramite la classe helper
TPdfStreamAdapter introdotta nella v1.8.0. PDFium preleva blocchi da
AStream solo quando necessario, quindi lo stream non viene
copiato in memoria: un TFileStream su un PDF da 4 GB, un TStream
supportato da HTTP o uno stream BLOB di database diventano tutti utilizzabili
senza staging dell'intero payload in RAM
AStream deve supportare il posizionamento (seek). La sua durata deve estendersi
fino alla chiusura del documento (chiamare UnloadDocument o riportare
Active a False). Passare
AOwnsStream = True per trasferire la proprietà dello stream a questo
TPdf — l'adattatore libera quindi AStream quando
UnloadDocument viene eseguito. Passare False quando il
chiamante vuole mantenere lo stream attivo dopo la chiusura del documento
LoadCustomDocument è volutamente un metodo separato (non un altro
overload di LoadDocument) così i chiamanti che passano una sottoclasse di
TMemoryStream non possono collegarsi per errore all'overload bufferizzato
LoadDocument(TMemoryStream, Boolean) — la
forma degli argomenti Pascal è identica ma la semantica è molto
diversa (bufferizzato rispetto a on-demand)
L'overload con criteri applica lo stesso comportamento compatible, strict o recovery e la stessa verifica xref delimitata documentati da LoadDocument. La verifica usa letture posizionali e ripristina il cursore della sorgente prima che PDFium continui il suo accesso on-demand
TPdfLoadOptions contiene Mode, AuditByteLimit, MaxIssues, MaxXrefSections, MaxXrefEntries, MaxObjectNumber, ValidateObjectOffsets e RequireFinalEndOfFileMarker, oltre alla funzione di classe Default
Password prima di chiamare LoadCustomDocument quando si aprono documenti cifratiAStream — può essere un TFileStream, un TMemoryStream o qualsiasi sottoclasse di TStream che onori Seek e 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;