procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean = False);
procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean; const Options: TPdfLoadOptions; out Report: TPdfLoadReport);
LoadCustomDocument är strömningssyskonet till de buffrade
LoadDocument-overloaderna. Det backas av PDFiums
FPDF_LoadCustomDocument-ingångspunkt via
hjälpklassen TPdfStreamAdapter som infördes i v1.8.0.
PDFium hämtar block från AStream bara när de behövs, så
strömmen kopieras inte till minnet: en TFileStream över en 4 GB
stor PDF, en HTTP-baserad TStream eller en databas-BLOB-ström blir alla
användbara utan att först mellanlagra hela nyttolasten i RAM
AStream måste stödja sökning (seek). Dess livstid måste sträcka
sig tills dokumentet stängs (anropa UnloadDocument eller sätt
Active tillbaka till False). Skicka
AOwnsStream = True för att överlåta strömägarskapet till denna
TPdf — adaptern frigör då AStream när
UnloadDocument körs. Skicka False när
anroparen vill behålla strömmen i livet efter att dokumentet stängts
LoadCustomDocument är medvetet en separat metod (inte ytterligare en
LoadDocument-overload) så att anropare som skickar en
TMemoryStream-subklass inte råkar binda till den buffrade
LoadDocument(TMemoryStream, Boolean)-overloaden —
Pascal-argumentformen är identisk men semantiken skiljer sig kraftigt
(buffrad kontra hämtning på begäran)
Policy-overloaden tillämpar samma compatible-, strict- eller recovery-beteende och samma avgränsade xref-granskning som dokumenteras av LoadDocument. Granskningen använder positionerade läsningar och återställer källans läsposition innan PDFium fortsätter sin åtkomst på begäran
TPdfLoadOptions bär Mode, AuditByteLimit, MaxIssues, MaxXrefSections, MaxXrefEntries, MaxObjectNumber, ValidateObjectOffsets och RequireFinalEndOfFileMarker, plus klassfunktionen Default
Password innan du anropar LoadCustomDocument när du öppnar krypterade dokumentAStream — det kan vara en TFileStream, en TMemoryStream eller vilken TStream-subklass som helst som respekterar Seek och 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;