PDFium Delphi Component Docs

제한된 임의 접근 저장소

컴포넌트: TPdf  ·  유닛: PDFium
탐색 가능한 작업 데이터를 호출자가 고른 메모리 상한 아래에 두고 더 커진 내용은 전용 임시 저장소로 넘깁니다

Syntax

const PdfDefaultStorageMemoryLimit = 64 * 1024 * 1024;

type TPdfStorageBackend = (psbMemory, psbTemporaryFile);

constructor TPdfRandomAccessStore.Create(AMemoryLimit: Int64 = PdfDefaultStorageMemoryLimit; const ATemporaryDirectory: string = '');

destructor Destroy; override;

function Read(var Buffer; Count: Longint): Longint; override;

function Seek(Offset: Int64; Origin: TSeekOrigin): Int64; override;

function Write(const Buffer; Count: Longint): Longint; override;

function ReadAt(Offset: Int64; var Buffer; Count: Longint): Longint;

function WriteAt(Offset: Int64; const Buffer; Count: Longint): Longint;

procedure CopyToStream(Destination: TStream; BufferSize: Integer = 1048576);

procedure Flush;

procedure SpillToDisk;

property Backend: TPdfStorageBackend;

property MemoryBytes: Int64;

property MemoryLimit: Int64;

property PeakMemoryBytes: Int64;

property Spilled: Boolean;

property TemporaryDirectory: string;

property TemporaryFileName: string;

TPdf save settings

property SaveMemoryLimit: Int64;

property SaveTemporaryDirectory: string;

property LastSaveSpillCount: Integer;

property LastSaveLargestMemoryBuffer: Int64;

SaveMemoryLimit내부 저장소마다 넘치기 전까지 허용되는 백킹 메모리 용량의 최댓값이며 기본값은 64 MiB입니다
SaveTemporaryDirectory넘친 파일이 쓰이는 기존 디렉터리이며 빈 값은 프로세스 임시 디렉터리를 사용합니다
LastSaveSpillCount가장 최근 저장 파이프라인에서 넘친 내부 작업 저장소의 개수입니다
LastSaveLargestMemoryBuffer가장 최근 저장 파이프라인에서 관찰된 단일 백킹 메모리 용량의 최댓값입니다

Description

TPdfRandomAccessStoreTStream을 상속하며 커서와 무관한 위치 지정 I/O 외에 일반적인 순차 읽기, 쓰기, 탐색, 크기 조정을 지원합니다

데이터는 논리적 끝이 MemoryLimit 이하인 동안 동적으로 크기가 조정되는 메모리 버퍼에 머뭅니다

상한을 넘는 첫 연산이 배타적인 임시 파일을 만들고 기존 바이트를 한 번 복사한 뒤 메모리 버퍼를 지우고, 저장소 수명이 끝날 때까지 파일 백엔드를 유지합니다

임시 핸들은 delete-on-close와 random-access 플래그를 사용하고 공유를 허용하지 않으며 정상적인 파괴나 생성자 롤백에서 제거됩니다

개별 연산은 내부 critical section으로 직렬화됩니다. 동시 호출자가 순차 커서를 두고 경쟁하면 안 될 때는 ReadAtWriteAt이 권장됩니다

저장소는 LoadCustomDocument에 바로 전달할 수 있고 PDFium 블록 콜백은 위치 지정 읽기를 사용하므로 저장소 커서를 바꾸지 않습니다

TPdf는 구성된 정책을 코어 저장, 저장된 PDF 후처리 작업 공간 전체, 중간 단계의 표준 변환, 검증, 암호화, DSS, PAdES 스테이징에 사용합니다

네이티브 증분 xref 스트림 복구는 고정 크기의 꼬리와 딕셔너리 창을 읽은 다음, 변경되지 않은 범위를 한도 있는 청크로 복사하면서 검증된 편집을 적용합니다

Memory accounting

Constraints

Example

var
  Store: TPdfRandomAccessStore;
begin
  Pdf.SaveMemoryLimit := 16 * 1024 * 1024;
  Pdf.SaveTemporaryDirectory := TPath.GetTempPath;
  Pdf.SaveAs('output.pdf');
  Log(Pdf.LastSaveSpillCount, Pdf.LastSaveLargestMemoryBuffer);

  Store := TPdfRandomAccessStore.Create(4 * 1024 * 1024);
  try
    Store.CopyFrom(SourceStream, SourceStream.Size);
    Store.Position := 0;
    Pdf.LoadCustomDocument(Store, False);
  finally
    Pdf.Active := False;
    Store.Free;
  end;
end;

See Also

LoadCustomDocument, SaveAs