PDFium Component Docs

LoadCustomDocument Metoda

Component: TPdf  ·  Unit: PDFium
Ładuje PDF z dowolnego przeszukiwalnego TStream przez blokowy czytnik PDFium pobierający dane na żądanie, więc dokumenty liczące wiele GB oraz źródła zdalne i bazodanowe nie wymagają z góry sporządzonej kopii w pamięci

Syntax

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

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

Description

LoadCustomDocument to strumieniowy odpowiednik buforowanych przeciążeń LoadDocument. Oparty jest na punkcie wejścia FPDF_LoadCustomDocument z PDFium, sięganym przez klasę pomocniczą TPdfStreamAdapter wprowadzoną w v1.8.0. PDFium pobiera bloki z AStream dopiero wtedy, gdy ich potrzebuje, więc strumień nie jest kopiowany do pamięci: TFileStream na 4 GB pliku PDF, TStream oparty na HTTP czy strumień BLOB z bazy danych stają się użyteczne bez wcześniejszego odkładania całej zawartości w RAM

AStream musi obsługiwać przewijanie (seek). Jego czas życia musi sięgać do zamknięcia dokumentu (wywołaj UnloadDocument albo ustaw Active z powrotem na False). Przekaż AOwnsStream = True, żeby oddać własność strumienia tej instancji TPdf — adapter zwolni wtedy AStream podczas UnloadDocument. Przekaż False, gdy wywołujący chce utrzymać strumień przy życiu po zamknięciu dokumentu

LoadCustomDocument jest celowo osobną metodą (a nie kolejnym przeciążeniem LoadDocument), aby wywołujący przekazujący podklasę TMemoryStream nie związał się przypadkowo z buforowanym przeciążeniem LoadDocument(TMemoryStream, Boolean) — kształt argumentów w Pascalu jest identyczny, ale semantyka bardzo się różni (buforowanie kontra pobieranie na żądanie)

Przeciążenie z polityką stosuje to samo zgodne, ścisłe lub odtwarzające zachowanie i ograniczony audyt xref udokumentowane w LoadDocument. Audyt używa odczytów pozycjonowanych i przywraca kursor źródła, zanim PDFium kontynuuje dostęp na żądanie

TPdfLoadOptions przenosi Mode, AuditByteLimit, MaxIssues, MaxXrefSections, MaxXrefEntries, MaxObjectNumber, ValidateObjectOffsets i RequireFinalEndOfFileMarker, a także funkcję klasową 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