PDFium Component Docs

Begrensde random access-opslag

Component: TPdf  ·  Unit: PDFium
Houdt seekable werkdata onder een door de aanroeper gekozen geheugengrens en zet grotere content over naar private tijdelijke opslag

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;

SaveMemoryLimitMaximale backing-memorycapaciteit van elke interne save store voordat die overloopt; standaard 64 MiB
SaveTemporaryDirectoryBestaande directory die voor spill-bestanden wordt gebruikt; een lege waarde gebruikt de tijdelijke directory van het proces
LastSaveSpillCountAantal interne working stores die tijdens de meest recente save-pipeline zijn overgelopen
LastSaveLargestMemoryBufferGrootste enkele backing-memorycapaciteit gemeten tijdens de meest recente save-pipeline

Description

TPdfRandomAccessStore is afgeleid van TStream en ondersteunt naast cursoronafhankelijke gepositioneerde I/O ook normale sequentiële reads, writes, seeks en resizing

De data blijft in een dynamisch meegroeiende geheugenbuffer zolang het logische einde op of onder MemoryLimit blijft

De eerste bewerking die de grens overschrijdt maakt een exclusief tijdelijk bestand aan, kopieert de bestaande bytes één keer, wist de geheugenbuffer en houdt de file-backend aan voor de rest van de levensduur van de store

De tijdelijke handle gebruikt delete-on-close- en random-access-flags, staat geen sharing toe en wordt verwijderd bij normale destructie of constructor-rollback

Individuele bewerkingen worden geserialiseerd door een interne critical section; ReadAt en WriteAt verdienen de voorkeur wanneer gelijktijdige aanroepers niet om de sequentiële cursor mogen concurreren

Een store kan rechtstreeks aan LoadCustomDocument worden doorgegeven; PDFium-blockcallbacks gebruiken gepositioneerde reads en wijzigen de store-cursor niet

TPdf gebruikt het geconfigureerde beleid voor core saves, elke saved-PDF-postprocessing-werkruimte en tussentijdse standards conversion, validatie, versleuteling, DSS en PAdES-staging

Native incrementele xref-stream-reparatie leest vaste tail- en dictionary-windows en past daarna gevalideerde edits toe terwijl ongewijzigde bereiken in begrensde chunks worden gekopieerd

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