PDFium Delphi Component Docs

LoadCustomDocument método

Componente: TPdf  ·  Unidade: PDFium
Carrega um PDF de qualquer TStream com capacidade de busca usando o leitor de blocos sob demanda do PDFium, de modo que documentos de vários GB e fontes remotas ou de banco de dados não precisam de uma cópia antecipada em memória

Syntax

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

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

Description

LoadCustomDocument é a contraparte em streaming das sobrecargas LoadDocument em buffer. Ele é implementado sobre o ponto de entrada FPDF_LoadCustomDocument do PDFium por meio da classe auxiliar TPdfStreamAdapter introduzida na v1.8.0. O PDFium puxa blocos de AStream apenas quando necessário, de modo que o stream não é copiado para a memória: um TFileStream sobre um PDF de 4 GB, um TStream sobre HTTP ou um stream de BLOB de banco de dados tornam-se utilizáveis sem estagiar todo o conteúdo na RAM primeiro

O AStream deve suportar busca (seek). Seu tempo de vida deve se estender até que o documento seja fechado (chame UnloadDocument ou retorne Active para False). Passe AOwnsStream = True para transferir a propriedade do stream para este TPdf — o adaptador então libera AStream quando UnloadDocument é executado. Passe False quando quem chama quiser manter o stream vivo depois que o documento fechar

LoadCustomDocument é intencionalmente um método separado (não outra sobrecarga de LoadDocument) para que quem chama passando uma subclasse de TMemoryStream não se vincule acidentalmente à sobrecarga em buffer LoadDocument(TMemoryStream, Boolean) — a forma dos argumentos Pascal é idêntica, mas a semântica é muito diferente (em buffer vs. sob demanda)

A sobrecarga com políticas aplica o mesmo comportamento compatível, estrito ou de recuperação e a mesma auditoria limitada de xref documentada por LoadDocument. A auditoria usa leituras posicionadas e restaura o cursor da origem antes que o PDFium continue seu acesso sob demanda

TPdfLoadOptions carrega Mode, AuditByteLimit, MaxIssues, MaxXrefSections, MaxXrefEntries, MaxObjectNumber, ValidateObjectOffsets e RequireFinalEndOfFileMarker, além da função de classe 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