PDFium Delphi Component Docs

Sınırlı rastgele erişimli depolama

Component: TPdf  ·  Unit: PDFium
Aranabilir çalışma verisini çağıranın seçtiği bellek üst sınırı altında tutar ve daha büyük içeriği özel geçici depolamaya taşar

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;

SaveMemoryLimitTaşmadan önce her iç kayıt deposunun azami destek belleği kapasitesi; varsayılan 64 MiB
SaveTemporaryDirectoryTaşma dosyaları için kullanılan mevcut dizin; boş değer işlem geçici dizinini kullanır
LastSaveSpillCountEn son kayıt hattı sırasında taşan iç çalışma depolarının sayısı
LastSaveLargestMemoryBufferEn son kayıt hattı sırasında gözlemlenen en büyük tek destek belleği kapasitesi

Description

TPdfRandomAccessStore, TStream sınıfından türetilir ve imleçten bağımsız konumlu G/Ç'nin yanı sıra normal sıralı okuma, yazma, arama (seek) ve boyutlandırmayı destekler

Mantıksal sonu MemoryLimit değerinde veya altında kaldığı sürece veriler dinamik boyutlu bir bellek arabelleğinde kalır

Üst sınırı aşan ilk işlem özel kullanımlık bir geçici dosya oluşturur, mevcut baytları bir kez kopyalar, bellek arabelleğini temizler ve depo ömrünün geri kalanı için dosya arka ucunu kullanır

Geçici dosya tanıtıcısı kapanışta-sil ve rastgele erişim bayraklarını kullanır, hiçbir paylaşıma izin vermez ve normal yıkımda ya da kurucu geri almasında kaldırılır

Tek tek işlemler içsel bir kritik bölüm ile serileştirilir; eşzamanlı çağıranların sıralı imleç için rekabet etmemesi gerektiğinde ReadAt ve WriteAt tercih edilir

Bir depo doğrudan LoadCustomDocument işlevine geçirilebilir; PDFium blok geri çağrıları konumlu okumalar kullanır ve depo imlecini değiştirmez

TPdf, yapılandırılmış ilkeyi çekirdek kayıtlar, kaydedilen her PDF son işleme çalışma alanı ve ara standart dönüştürme, doğrulama, şifreleme, DSS ve PAdES hazırlama aşamalarında kullanır

Yerel artımlı xref akışı onarımı sabit boyutlu kuyruk ve sözlük pencerelerini okur, ardından doğrulanmış düzenlemeleri sınırlı parçalar hâlinde değişmeyen aralıkları kopyalayarak uygular

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