PDFium Component Docs

LoadCustomDocument 메서드

이 API 항목은 식별자, 시그니처, 코드 블록, PDF 용어를 원래 형태로 유지합니다.
컴포넌트: TPdf  ·  유닛: PDFium
PDFium의 on-demand block reader를 사용해 seek 가능한 모든 TStream에서 PDF를 읽습니다. 그래서 multi-GB document나 remote / database-backed source도 미리 in-memory copy를 만들 필요가 없습니다

구문

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

설명

LoadCustomDocument은 buffered LoadDocument overload에 대한 streaming 대응입니다. 이는 v1.8.0에서 도입된 TPdfStreamAdapter helper class를 통해 PDFium의 FPDF_LoadCustomDocument entry point에 연결됩니다. PDFium은 필요할 때만 AStream에서 block을 가져오므로 stream을 메모리로 복사하지 않습니다: 4 GB PDF를 담은 TFileStream, HTTP 기반 TStream, database BLOB stream도 전체 payload를 먼저 RAM에 올리지 않고 사용할 수 있습니다

AStream은 seeking을 지원해야 합니다. lifetime은 document가 닫힐 때까지 이어져야 합니다(UnloadDocument를 호출하거나 Active를 다시 False로 설정하세요). AOwnsStream = True를 넘기면 stream ownership을 이 TPdf에 넘기게 되며 — 그러면 adapter가 UnloadDocument가 실행될 때 AStream을 해제합니다. document가 닫힌 뒤에도 caller가 stream을 살려 두고 싶다면 False를 넘기세요

LoadCustomDocument은 일부러 별도 method이며 다른 LoadDocument overload가 아닙니다. 그래야 TMemoryStream 파생형을 넘기는 caller가 buffered LoadDocument(TMemoryStream, Boolean) overload에 실수로 바인드되는 일을 막을 수 있습니다. Pascal argument shape는 같지만 의미는 매우 다릅니다(buffered vs. on-demand)

비고

예제

// stream ownership을 Pdf1에 넘기는 streaming load
var
  Stream: TFileStream;
begin
  Stream := TFileStream.Create('C:\Huge.pdf', fmOpenRead or fmShareDenyWrite);
  Pdf1.LoadCustomDocument(Stream, True); // Pdf1이 UnloadDocument 시 Stream을 해제합니다
  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;

참고 항목

LoadDocument, Active, Password, FileName