PDFium Delphi Component Docs

LoadCustomDocument metod

Component: TPdf  ·  Unit: PDFium
Läser in en PDF från vilken sökbar TStream som helst via PDFiums blockläsare på begäran, så att dokument på flera GB och fjärr- eller databasbaserade källor inte behöver en inledande kopia i minnet

Syntax

procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean = False);

procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean; const Options: TPdfLoadOptions; out Report: TPdfLoadReport);

Description

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

Remarks

Example

// 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;

See Also

LoadDocument, Active, Password, FileName