procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean = False);
LoadCustomDocument is de streaming tegenhanger van de buffered LoadDocument-overloads. Het wordt ondersteund door PDFium's FPDF_LoadCustomDocument-entry point via de helperklasse TPdfStreamAdapter die in v1.8.0 is geïntroduceerd. PDFium haalt blocks uit AStream alleen op wanneer dat nodig is, dus de stream wordt niet naar memory gekopieerd: een TFileStream over een 4 GB PDF, een HTTP-backed TStream of een database BLOB stream worden allemaal bruikbaar zonder eerst de volledige payload in RAM te zetten
AStream moet seeking ondersteunen. De lifetime moet doorlopen totdat het document is gesloten (roep UnloadDocument aan of zet Active terug op False). Geef AOwnsStream = True op om het stream ownership aan deze TPdf over te dragen — de adapter freet AStream dan wanneer UnloadDocument draait. Geef False op wanneer de caller de stream na het sluiten van het document levend wil houden
LoadCustomDocument is bewust een aparte methode, geen extra LoadDocument-overload, zodat callers die een TMemoryStream-subclass doorgeven niet per ongeluk aan de buffered LoadDocument(TMemoryStream, Boolean)-overload worden gebonden — de Pascal-argumentvorm is identiek, maar de semantics zijn heel anders (buffered versus on-demand)
Password in vóór je LoadCustomDocument aanroept bij het openen van versleutelde documentenAStream — het kan een TFileStream, een TMemoryStream of elke TStream-subclass zijn die Seek en Read respecteertLoadDocument over dezelfde data — kies op basis van memory pressure versus latencyAOwnsStream = True
// Streaming load met stream ownership overgedragen aan Pdf1
var
Stream: TFileStream;
begin
Stream := TFileStream.Create('C:\Huge.pdf', fmOpenRead or fmShareDenyWrite);
Pdf1.LoadCustomDocument(Stream, True); // Pdf1 freed Stream bij UnloadDocument
Pdf1.Active := True;
ShowMessage('Pages: ' + IntToStr(Pdf1.PageCount));
end;
// Externally-owned stream — de caller freed hem na 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;