procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean = False);
procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean; const Options: TPdfLoadOptions; out Report: TPdfLoadReport);
LoadCustomDocument is de streaming-tegenhanger van de gebufferde LoadDocument-overloads. De methode is gebouwd op het FPDF_LoadCustomDocument-entrypoint van PDFium, via de helperklasse TPdfStreamAdapter die in v1.8.0 is geïntroduceerd. PDFium haalt blokken uit AStream alleen wanneer dat nodig is, zodat de stream niet naar het geheugen wordt gekopieerd: een TFileStream over een PDF van 4 GB, een HTTP-ondersteunde TStream of een database-BLOB-stream wordt zo bruikbaar zonder eerst de volledige payload in het RAM te zetten
AStream moet seeking ondersteunen. De levensduur moet doorlopen tot het document is gesloten (roep UnloadDocument aan of zet Active terug op False). Geef AOwnsStream = True mee om het eigendom van de stream over te dragen aan deze TPdf — de adapter geeft AStream dan vrij zodra UnloadDocument draait. Geef False mee wanneer de aanroeper de stream na het sluiten van het document zelf in leven wil houden
LoadCustomDocument is bewust een aparte methode (geen extra LoadDocument-overload), zodat aanroepers die een TMemoryStream-subklasse doorgeven niet per ongeluk aan de gebufferde overload LoadDocument(TMemoryStream, Boolean) binden — de Pascal-argumentvorm is identiek, maar de semantiek wezenlijk anders (gebufferd versus on-demand)
De policy-overload past hetzelfde compatibele, strikte of recovery-gedrag en dezelfde begrensde xref-audit toe als gedocumenteerd bij LoadDocument. De audit gebruikt gepositioneerde reads en zet de broncursor terug voordat PDFium zijn on-demand toegang voortzet
TPdfLoadOptions bevat Mode, AuditByteLimit, MaxIssues, MaxXrefSections, MaxXrefEntries, MaxObjectNumber, ValidateObjectOffsets en RequireFinalEndOfFileMarker, plus de class function Default
Password vóór het aanroepen van LoadCustomDocument wanneer u versleutelde documenten opentAStream — het kan een TFileStream, een TMemoryStream of elke TStream-subklasse zijn die Seek en Read correct uitvoertAOwnsStream = 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;