PDFium Component Docs

Avgrenset lagring med direkte tilgang

Component: TPdf  ·  Unit: PDFium
Holder søkbare arbeidsdata under en minneterskel valgt av kalleren og spiller større innhold over til privat midlertidig lagring

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;

SaveMemoryLimitMaksimal bakminnekapasitet for hver internt lagringsbutikk før den spiller over; standardverdien er 64 MiB
SaveTemporaryDirectoryEksisterende katalog brukt til overspillfiler; en tom verdi bruker prosessens midlertidige katalog
LastSaveSpillCountAntall interne arbeidsbutikker som spilte over under den siste lagringspipelinen
LastSaveLargestMemoryBufferStørste enkelte bakminnekapasitet observert under den siste lagringspipelinen

Description

TPdfRandomAccessStore stammer fra TStream og støtter normale sekvensielle lesinger, skrivinger, søk og størrelsesendring, i tillegg til posisjonsuavhengig posisjonert I/O

Data forblir i en dynamisk dimensjonert minnebuffer så lenge den logiske enden holder seg på eller under MemoryLimit

Den første operasjonen som krysser taket oppretter en eksklusiv midlertidig fil, kopierer de eksisterende bytene én gang, scrubber minnebufferen og beholder fil-backend-en for resten av butikkens levetid

Det midlertidige håndtaket bruker delete-on-close- og tilfeldig tilgang-flagg, tillater ingen deling, og fjernes ved normal destrukjon eller konstruktør-rullback

Enkeltoperasjoner serialiseres av en intern kritisk seksjon; ReadAt og WriteAt er å foretrekke når samtidige kallere ikke skal konkurrere om den sekvensielle pekeren

En butikk kan sendes rett til LoadCustomDocument; PDFiums blokk-callbacks bruker posisjonerte lesinger og endrer ikke butikkens peker

TPdf bruker den konfigurerte politikken for kjerne-lagring, hvert arbeidsområde for etterbehandling av lagrede PDF-er, og mellomliggende standardskonvertering, validering, kryptering, DSS- og PAdES-klargjøring

Native inkrementell xref-strøm-reparasjon leser vinduer med fast størrelse fra halen og ordbøker, og anvender deretter validerte endringer mens uendrede områder kopieres i avgrensede biter

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