PDFium Delphi Component Docs

Ograničena pohrana s nasumičnim pristupom

Komponenta: TPdf  ·  Jedinica: PDFium
Drži podatke radnog prostora koji podržavaju pozicioniranje ispod ograničenja memorije koje bira pozivatelj, a veći sadržaj prelijeva u privatnu privremenu pohranu

Sintaksa

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;

Postavke spremanja TPdf-a

property SaveMemoryLimit: Int64;

property SaveTemporaryDirectory: string;

property LastSaveSpillCount: Integer;

property LastSaveLargestMemoryBuffer: Int64;

SaveMemoryLimitNajveći kapacitet potporne memorije svakog internog spremišta spremanja prije prelijevanja; zadano 64 MiB
SaveTemporaryDirectoryPostojeći direktorij koji se koristi za datoteke prelijevanja; prazna vrijednost koristi privremeni direktorij procesa
LastSaveSpillCountBroj internih radnih spremišta koja su se prelila tijekom najnovijeg cjevovoda spremanja
LastSaveLargestMemoryBufferNajveći zabilježeni kapacitet jedne potporne memorije tijekom najnovijeg cjevovoda spremanja

Opis

TPdfRandomAccessStore izvodi se iz TStream i podržava normalna sekvencijalna očitavanja, upisivanja, pozicioniranja i određivanje veličine, uz pozicionirani I/O neovisan o kursoru

Podaci ostaju u dinamički dimenzioniranom memorijskom međuspremniku dok im logički kraj ostaje na MemoryLimit ili ispod njega

Prva operacija koja prijeđe ograničenje stvara ekskluzivnu privremenu datoteku, jednom kopira postojeće bajtove, čisti memorijski međuspremnik i zadržava pozadinu na datoteci do kraja vijeka spremišta

Privremeni handle koristi zastavice delete-on-close i nasumičnog pristupa, ne dopušta dijeljenje i uklanja se pri normalnom uništavanju ili vraćanju konstruktora

Pojedinačne operacije serijalizira interna kritična sekcija; ReadAt i WriteAt su poželjni kada istodobni pozivatelji ne smiju natjecati se za sekvencijalni kursor

Spremište se može proslijediti izravno u LoadCustomDocument; blok povratni pozivi PDFiuma koriste pozicionirana očitavanja i ne mijenjaju kursor spremišta

TPdf koristi konfiguriranu politiku za osnovna spremanja, svaki radni prostor naknadne obrade spremljenog PDF-a te posredničke pripreme pretvorbe standarda, validacije, šifriranja, DSS-a i PAdES-a

Nativni popravak inkrementalnih xref tokova čita prozore repa i rječnika fiksne veličine, a zatim primjenjuje ovjerene izmjene dok kopira nepromijenjene raspone u ograničenim komadima

Računovanje memorije

Ograničenja

Primjer

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;

Vidi također

LoadCustomDocument, SaveAs