procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean = False);
procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean; const Options: TPdfLoadOptions; out Report: TPdfLoadReport);
LoadCustomDocument est l’équivalent en flux des surcharges bufférisées de
LoadDocument. Il s’appuie sur le point d’entrée
FPDF_LoadCustomDocument de PDFium via la classe auxiliaire
TPdfStreamAdapter introduite dans la v1.8.0
PDFium tire des blocs de AStream uniquement lorsque nécessaire, si bien que le
flux n’est pas copié en mémoire : un TFileStream sur un PDF de 4 Go,
un TStream adossé à HTTP ou un flux de BLOB de base de données deviennent
utilisables sans stocker d’abord la charge complète en RAM
AStream doit prendre en charge le repositionnement. Sa durée de vie doit s’étendre
jusqu’à la fermeture du document (appelez UnloadDocument ou repassez
Active à False). Passez
AOwnsStream = True pour confier la propriété du flux à ce
TPdf — l’adaptateur libère alors AStream lorsque
UnloadDocument s’exécute. Passez False lorsque
l’appelant veut garder le flux actif après la fermeture du document
LoadCustomDocument est volontairement une méthode séparée (et non une autre
surcharge de LoadDocument) afin que les appelants passant une sous-classe de
TMemoryStream ne puissent pas se lier accidentellement à la surcharge
bufférisée LoadDocument(TMemoryStream, Boolean) — la
forme des arguments Pascal est identique mais la sémantique est très
différente (bufférisé vs à la demande)
La surcharge de politique applique le même comportement compatible, strict ou de récupération et le même audit borné des xref que ceux documentés par LoadDocument. L’audit utilise des lectures positionnées et restaure le curseur de la source avant que PDFium ne poursuive son accès à la demande
TPdfLoadOptions transporte Mode, AuditByteLimit, MaxIssues, MaxXrefSections, MaxXrefEntries, MaxObjectNumber, ValidateObjectOffsets et RequireFinalEndOfFileMarker, plus la fonction de classe Default
Password avant d’appeler LoadCustomDocument lorsque vous ouvrez des documents chiffrésAStream — il peut s’agir d’un TFileStream, d’un TMemoryStream ou de toute sous-classe de TStream respectant Seek et 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;