PDFium Delphi Component Docs

Обмежене сховище довільного доступу

Component: TPdf  ·  Unit: PDFium
Тримає придатні до пошуку робочі дані під обраною викликачем стелею пам’яті та виливає більший вміст до приватного тимчасового сховища

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;

SaveMemoryLimitМаксимальна ємність резервної пам’яті кожного внутрішнього сховища збереження перед виливом; типово 64 MiB
SaveTemporaryDirectoryНаявний каталог для файлів виливу; порожнє значення використовує тимчасовий каталог процесу
LastSaveSpillCountКількість внутрішніх робочих сховищ, які вилилися під час останнього конвеєра збереження
LastSaveLargestMemoryBufferНайбільша окрема ємність резервної пам’яті, спостережена під час останнього конвеєра збереження

Description

TPdfRandomAccessStore успадковує від TStream і підтримує звичайні послідовні читання, записи, пошук і зміну розміру окрім позиційованого вводу-виводу, незалежного від курсора

Дані лишаються в динамічно розміреному буфері пам’яті, поки його логічний кінець не перевищує MemoryLimit

Перша операція, що перетинає стелю, створює ексклюзивний тимчасовий файл, один раз копіює наявні байти, очищає буфер пам’яті і тримає файловий бекенд до кінця життя сховища

Тимчасовий дескриптор використовує прапорці delete-on-close і довільного доступу, не дозволяє спільного доступу та видаляється під час нормального знищення або відкочування конструктора

Окремі операції серіалізуються внутрішньою критичною секцією; ReadAt і WriteAt надають перевагу, коли паралельні викликачі не мають змагатися за послідовний курсор

Сховище можна передати напряму в LoadCustomDocument; блокові колбеки PDFium використовують позиційоване читання і не змінюють курсор сховища

TPdf використовує налаштовану політику для ядрових збережень, кожного робочого простору постобробки збереженого PDF і проміжного перетворення стандартів, валідації, шифрування, DSS і підготовки PAdES

Нативне інкрементальне відновлення xref-потоків читає вікна кінця та словників фіксованого розміру, потім застосовує перевірені правки, копіюючи незмінені діапазони обмеженими шматками

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