procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean = False);
LoadCustomDocument jest strumieniowym odpowiednikiem buforowanych
przeciążeń LoadDocument. Jest oparty na punkcie wejścia PDFium
FPDF_LoadCustomDocument przez pomocniczą klasę
TPdfStreamAdapter wprowadzoną w v1.8.0
PDFium pobiera bloki z AStream tylko wtedy, gdy są potrzebne, więc
strumień nie jest kopiowany do pamięci: TFileStream nad plikiem PDF o rozmiarze 4 GB,
TStream oparty na HTTP albo strumień BLOB z bazy danych stają się
użyteczne bez wcześniejszego buforowania całego ładunku w RAM
AStream musi obsługiwać seek. Jego czas życia musi obejmować
moment zamknięcia dokumentu (wywołaj UnloadDocument albo ustaw
Active z powrotem na False). Ustaw
AOwnsStream = True, aby przekazać własność strumienia temu
TPdf — adapter zwolni wtedy AStream, gdy
uruchomi się UnloadDocument. Ustaw False, gdy
wywołujący chce utrzymać strumień przy życiu po zamknięciu dokumentu
LoadCustomDocument jest celowo osobną metodą, a nie kolejnym przeciążeniem
LoadDocument, aby wywołujący przekazujący klasę potomną TMemoryStream
nie mogli przypadkiem trafić na buforowane przeciążenie
LoadDocument(TMemoryStream, Boolean) — kształt argumentów w Pascalu
jest taki sam, ale semantyka jest zupełnie
inna, buforowana zamiast na żądanie
Password przed wywołaniem LoadCustomDocument podczas otwierania zaszyfrowanych dokumentówAStream — może to być TFileStream, TMemoryStream albo dowolna klasa potomna TStream, która respektuje Seek i 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;