procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean = False);
LoadCustomDocument ist das Streaming-Gegenstück zu den gepufferten
LoadDocument-Überladungen Es wird über die
FPDF_LoadCustomDocument-Schnittstelle von PDFium durch die
Hilfsklasse TPdfStreamAdapter aus v1.8.0 unterstützt PDFium zieht
Blöcke aus AStream nur bei Bedarf, daher wird der Stream nicht
in den Speicher kopiert: Ein TFileStream über ein 4 GB-PDF, ein
HTTP-gestützter TStream oder ein Datenbank-BLOB-Stream werden nutzbar,
ohne die gesamte Nutzlast zuerst in RAM abzulegen
AStream muss das Suchen unterstützen Seine Lebensdauer muss bis zum
Schließen des Dokuments reichen (rufen Sie UnloadDocument auf oder
setzen Sie Active wieder auf False) Übergeben Sie
AOwnsStream = True, um den Stream an dieses TPdf zu
übergeben — der Adapter gibt dann AStream frei, wenn
UnloadDocument ausgeführt wird Übergeben Sie False, wenn der
Aufrufer den Stream nach dem Schließen des Dokuments weiter verwenden möchte
LoadCustomDocument ist absichtlich eine eigene Methode und nicht nur eine weitere
LoadDocument-Überladung, damit Aufrufer mit einem
TMemoryStream-Nachkommen nicht versehentlich an die gepufferte
LoadDocument(TMemoryStream, Boolean)-Überladung gebunden werden können
— die Pascal-Argumentform ist identisch, die Semantik aber sehr unterschiedlich
(gepuffert statt On-Demand)
Password, bevor Sie LoadCustomDocument zum Öffnen verschlüsselter Dokumente aufrufenTPdf macht keine Annahmen über AStream — es kann ein
TFileStream, ein TMemoryStream oder jede
TStream-Unterklasse sein, die Seek und Read
beachtetTPdf ihn freigibt
führt auf PDFium-Ebene zu undefiniertem Verhalten Wenn Sie unsicher sind,
übertragen Sie die Besitzverantwortung mit AOwnsStream = True
// Streaming-Laden mit an Pdf1 übertragener Stream-Besitzverantwortung
var
Stream: TFileStream;
begin
Stream := TFileStream.Create('C:\Huge.pdf', fmOpenRead or fmShareDenyWrite);
Pdf1.LoadCustomDocument(Stream, True); // Pdf1 gibt Stream bei UnloadDocument frei
Pdf1.Active := True;
ShowMessage('Pages: ' + IntToStr(Pdf1.PageCount));
end;
// Extern verwalteter Stream — der Aufrufer gibt ihn nach UnloadDocument frei
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;