procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean = False);
procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean; const Options: TPdfLoadOptions; out Report: TPdfLoadReport);
LoadCustomDocument to strumieniowy odpowiednik buforowanych przeciążeń
LoadDocument. Oparty jest na punkcie wejścia
FPDF_LoadCustomDocument z PDFium, sięganym przez klasę pomocniczą
TPdfStreamAdapter wprowadzoną w v1.8.0. PDFium pobiera bloki z
AStream dopiero wtedy, gdy ich potrzebuje, więc strumień
nie jest kopiowany do pamięci: TFileStream na 4 GB
pliku PDF, TStream oparty na HTTP czy strumień BLOB z bazy danych stają się
użyteczne bez wcześniejszego odkładania całej zawartości w RAM
AStream musi obsługiwać przewijanie (seek). Jego czas życia musi sięgać
do zamknięcia dokumentu (wywołaj UnloadDocument albo ustaw
Active z powrotem na False). Przekaż
AOwnsStream = True, żeby oddać własność strumienia tej instancji
TPdf — adapter zwolni wtedy AStream podczas
UnloadDocument. Przekaż 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 podklasę
TMemoryStream nie związał się przypadkowo z buforowanym
przeciążeniem LoadDocument(TMemoryStream, Boolean) —
kształt argumentów w Pascalu jest identyczny, ale semantyka bardzo się
różni (buforowanie kontra pobieranie na żądanie)
Przeciążenie z polityką stosuje to samo zgodne, ścisłe lub odtwarzające zachowanie i ograniczony audyt xref udokumentowane w LoadDocument. Audyt używa odczytów pozycjonowanych i przywraca kursor źródła, zanim PDFium kontynuuje dostęp na żądanie
TPdfLoadOptions przenosi Mode, AuditByteLimit, MaxIssues, MaxXrefSections, MaxXrefEntries, MaxObjectNumber, ValidateObjectOffsets i RequireFinalEndOfFileMarker, a także funkcję klasową Default
Password przed wywołaniem LoadCustomDocument, gdy otwierasz dokumenty szyfrowaneAStream — może to być TFileStream, TMemoryStream albo dowolna podklasa TStream honorująca 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;