procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean = False);
LoadCustomDocument to strumieniowy odpowiednik buforowanych przeciążeń LoadDocument. Opiera się na punkcie wejścia FPDF_LoadCustomDocument PDFium za pośrednictwem klasy pomocniczej TPdfStreamAdapter wprowadzonej w wersji v1.8.0. PDFium pobiera bloki ze strumienia AStream tylko w razie potrzeby, więc strumień nie jest kopiowany do pamięci: TFileStream nad 4 GB plikiem PDF, strumień TStream obsługiwany przez HTTP lub strumień obiektu BLOB bazy danych stają się użyteczne bez wcześniejszego etapowania całego ładunku w pamięci RAM.
Strumień AStream musi obsługiwać pozycjonowanie. Jego okres istnienia musi trwać do momentu zamknięcia dokumentu (wywołaj UnloadDocument lub ustaw Active z powrotem na False). Przekaż AOwnsStream = True, aby przekazać własność strumienia temu obiektowi TPdf — adapter zwalnia wtedy AStream podczas wykonywania UnloadDocument. Przekaż False, gdy wywołujący chce utrzymać strumień przy życiu po zamknięciu dokumentu.
LoadCustomDocument to celowo osobna metoda (a nie kolejne przeciążenie LoadDocument), aby wywołujący przekazujący podklasę TMemoryStream nie mogli przypadkowo powiązać z buforowanym przeciążeniem LoadDocument(TMemoryStream, Boolean) — kształt argumentu w Pascalu jest identyczny, ale semantyka bardzo się różni (buforowane vs. na żądanie).
Password przed wywołaniem LoadCustomDocument przy otwieraniu zaszyfrowanych dokumentów.AStream — może to być TFileStream, TMemoryStream lub dowolna podklasa TStream, która honoruje Seek i 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;