PDFium Delphi Component Docs

تخزين وصول عشوائي محدود

المكوّن: TPdf  ·  الوحدة: PDFium
يُبقي بيانات العمل القابلة للتنقل تحت سقف ذاكرة يختاره المستدعي ويفرِّغ المحتوى الأكبر إلى تخزين مؤقت خاص

الصياغة

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

property SaveMemoryLimit: Int64;

property SaveTemporaryDirectory: string;

property LastSaveSpillCount: Integer;

property LastSaveLargestMemoryBuffer: Int64;

SaveMemoryLimitالسعة القصوى لذاكرة السند لكل مخزن حفظ داخلي قبل أن يُفرَّغ؛ والافتراضي 64 MiB
SaveTemporaryDirectoryدليل موجود يُستخدم لملفات التفريغ؛ والقيمة الفارغة تستخدم دليل الملفات المؤقتة للعملية
LastSaveSpillCountعدد المخازن الداخلية العاملة التي فُرِّغت خلال خط أنابيب الحفظ الأخير
LastSaveLargestMemoryBufferأكبر سعة ذاكرة سند مفردة لوحظت خلال خط أنابيب الحفظ الأخير

الوصف

تشتق TPdfRandomAccessStore من TStream وتدعم القراءات والكتابات والتنقلات التسلسلية العادية وتحديد الحجم، إضافة إلى إدخال/إخراج موضعي مستقل عن المؤشر

تبقى البيانات في مخزن ذاكرة متغير الحجم ما دامت نهايتها المنطقية عند MemoryLimit أو دونه

تنشئ أول عملية تعبر سقفَ الحد ملفًا مؤقتًا حصريًا، وتنسخ البايتات الموجودة مرة واحدة، وتمسح مخزن الذاكرة، وتُبقي الخلفية الملفية لبقية عمر المخزن

يستخدم المقبض المؤقت رايتي الحذف عند الإغلاق والوصول العشوائي، ولا يسمح بأي مشاركة، ويُزال عند التدمير العادي أو التراجع عن الباني

تُسلسَل العمليات الفردية بقسمة حرجة داخلية؛ وتُفضَّل ReadAt و WriteAt عندما يجب ألا يتنافس المستدعون المتزامنون على المؤشر التسلسلي

يمكن تمرير المخزن مباشرة إلى LoadCustomDocument؛ وتستخدم استدعاءات كتل PDFium قراءات موضعية لا تغيّر مؤشر المخزن

تستخدم TPdf السياسة المضبوطة للحفظ الأساسي ولمساحة عمل المعالجة اللاحقة لكل PDF محفوظ وللتجهيز الوسيط لتحويل المعايير والمصادقة والتعمية و DSS و PAdES

تقرأ إصلاح تدفقات xref التزايدي الأصلي نوافذَ ذيلٍ وقواميس ثابتة الحجم، ثم تطبق التحريرات المتحقق منها أثناء نسخ المديات غير المتغيرة على دفعات محدودة

حساب الذاكرة

القيود

مثال

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;

انظر أيضًا

LoadCustomDocument, SaveAs