PDFium Delphi Component Docs

Afgrænset random access-lager

Komponent: TPdf  ·  Enhed: PDFium
Holder søgbare arbejdsdata under et af kalderen valgt hukommelsesloft og spiller større indhold til privat midlertidigt lager

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 backing-memory-kapacitet for hver intern gemnings-butik, før den spiller; standard er 64 MiB
SaveTemporaryDirectoryEksisterende mappe, der bruges til spill-filer; en tom værdi bruger processens midlertidige mappe
LastSaveSpillCountAntal interne arbejdsbutikker, der spillede under den seneste gemnings-pipeline
LastSaveLargestMemoryBufferStørste enkelte backing-memory-kapacitet observeret under den seneste gemnings-pipeline

Description

TPdfRandomAccessStore nedarver fra TStream og understøtter normale sekventielle læsninger, skrivninger, seeks og dimensionering ud over markøruafhængig positioneret I/O

Data forbliver i en dynamisk dimensioneret hukommelsesbuffer, mens dens logiske ende holder sig på eller under MemoryLimit

Den første operation, der krydser loftet, opretter en eksklusiv midlertidig fil, kopierer de eksisterende bytes én gang, skrubber hukommelsesbufferen og beholder filbackendet i resten af lagerets levetid

Det midlertidige handle bruger delete-on-close- og random-access-flag, tillader ingen deling og fjernes ved normal destruktion eller konstruktor-tilbagerulning

Individuelle operationer serialiseres af en intern kritisk sektion; ReadAt og WriteAt foretrækkes, når samtidige kaldere ikke må konkurrere om den sekventielle markør

Et lager kan sendes direkte til LoadCustomDocument; PDFium-blokcallbacks bruger positionerede læsninger og ændrer ikke lagermarkøren

TPdf bruger den konfigurerede politik til kerne-gemninger, ethvert saved-PDF-postprocessing-workspace og mellemliggende standards-konvertering, validering, kryptering, DSS og PAdES-staging

Native inkrementel xref-stream-reparation læser fixed-size tail- og ordbogsvinduer og anvender derefter validerede ændringer, mens uændrede områder kopieres i afgrænsede chunks

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