PDFium Delphi Component Docs

Apribota atsitiktinės prieigos saugykla

Komponentas: TPdf  ·  Modulis: PDFium
Laiko ieškomuosius darbinius duomenis žemiau kreipėjo pasirinktos atminties ribos, o didesnį turinį perpila į privatų laikinąjį diską

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;

SaveMemoryLimitDidžiausia kiekvienos vidinės įrašymo saugyklos pareminės atminties talpa, kol ji perpilama; numatytoji — 64 MiB
SaveTemporaryDirectoryEsamas katalogas, kuriame laikomi perpilti failai; tuščia reikšmė naudoja proceso laikinąjį katalogą
LastSaveSpillCountVidinių darbinių saugyklų, perpiltų paskutinės įrašymo grandinės metu, skaičius
LastSaveLargestMemoryBufferDidžiausia viena pareminės atminties talpa, užfiksuota paskutinės įrašymo grandinės metu

Description

TPdfRandomAccessStore kildinamas iš TStream ir, be nuo žymeklio nepriklausomų pozicinių įvedimo-išvedimo operacijų, palaiko įprastus nuoseklius skaitymus, rašymus, pozicionavimą ir dydžio keitimą

Duomenys lieka dinamiškai didinamame atminties buferyje, kol jo loginė pabaiga nesiekia MemoryLimit arba yra lygi jam

Pirma operacija, peržengianti ribą, sukuria išskirtinį laikinąjį failą, vieną kartą nukopijuoja esamus baitus, išvalo atminties buferį ir likusiam saugyklos gyvavimo laikui palieka failo galinę sistemą

Laikinoji rankena naudoja trynimo uždarant ir atsitiktinės prieigos požymius, neleidžia jokio bendrinimo ir pašalinama normaliai sunaikinant arba atšaukus konstruktorių

Atskiros operacijos nuoseklinamos vidine kritine sekcija; ReadAt ir WriteAt pageidautinos, kai lygiagretūs kreipėjai neturi varžytis dėl nuosekliojo žymeklio

Saugyklą galima perduoti tiesiogiai LoadCustomDocument; PDFium blokų atgaliniai iškvietimai naudoja pozicinius skaitymus ir nekeičia saugyklos žymeklio

TPdf sukonfigūruotą politiką taiko pagrindiniams įrašymams, kiekvienai įrašyto PDF tolesnio apdorojimo darbinei erdvei ir tarpinei standartų konversijai, tikrinimui, šifravimui, DSS bei PAdES paruošimui

Natyvus prieauginis xref srauto remontas skaito fiksuoto dydžio uodegos ir žodynų langus, o tada, kopijuodamas nepakeistus intervalus apribotais gabalais, taiko patikrintus redagavimus

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