PDFium Component Docs

LoadCustomDocument methode

Component: TPdf  ·  Unit: PDFium
Laadt een PDF vanuit elke seekable TStream via de on-demand block reader van PDFium, zodat documenten van meerdere GB en externe of databaseondersteunde bronnen geen voorafgaande kopie in het geheugen nodig hebben

Syntax

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

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

Description

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

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