procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean = False);
LoadCustomDocument, tamponlu LoadDocument overload'larının akış karşılığıdır. v1.8.0 ile eklenen TPdfStreamAdapter yardımcı sınıfı üzerinden PDFium'un FPDF_LoadCustomDocument giriş noktasını kullanır. PDFium blokları yalnızca gerektiğinde AStream içinden çeker, bu yüzden akış belleğe kopyalanmaz: 4 GB bir PDF üzerindeki TFileStream, HTTP destekli bir TStream ya da veritabanı BLOB stream'i tüm yükü önce RAM'e almadan kullanılabilir
AStream seeking desteklemelidir. Ömrü belge kapanana kadar sürmelidir (UnloadDocument çağırın ya da Active değerini tekrar False yapın). Stream ownership'ini bu TPdf üzerine devretmek için AOwnsStream = True verin — adapter o zaman UnloadDocument çalıştığında AStream serbest bırakır. False verin, belge kapandıktan sonra stream'i canlı tutmak istiyorsanız
LoadCustomDocument bilinçli olarak ayrı bir yöntemdir (başka bir LoadDocument overload'u değildir) böylece TMemoryStream alt sınıfı geçiren çağıranlar yanlışlıkla tamponlu LoadDocument(TMemoryStream, Boolean) overload'una bağlanamaz; Pascal argüman şekli aynı olsa da semantik çok farklıdır (buffered vs. on-demand)
LoadCustomDocument çağrısından önce Password ayarlayınAStream hakkında hiçbir varsayım yapmaz — bir TFileStream, TMemoryStream ya da Seek ve Read destekleyen herhangi bir TStream alt sınıfı olabilirLoadDocument'a göre belirgin biçimde daha yavaş sayfa işlemlerine yol açar — seçim yaparken bellek baskısı ile gecikme arasında karar verinAOwnsStream = True ile devredin
// Stream ownership Pdf1'e devredilmiş akışlı yükleme
var
Stream: TFileStream;
begin
Stream := TFileStream.Create('C:\Huge.pdf', fmOpenRead or fmShareDenyWrite);
Pdf1.LoadCustomDocument(Stream, True); // Pdf1, Stream'i UnloadDocument sırasında serbest bırakır
Pdf1.Active := True;
ShowMessage('Pages: ' + IntToStr(Pdf1.PageCount));
end;
// Dışarıdan sahiplenilen stream — çağıran bunu UnloadDocument sonrasında serbest bırakır
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;