procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean = False);
procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean; const Options: TPdfLoadOptions; out Report: TPdfLoadReport);
LoadCustomDocument هو الندّ التدفقي لنسخ overload المخزَّنة من
LoadDocument. ويستند إلى نقطة دخول
FPDF_LoadCustomDocument في PDFium عبر
TPdfStreamAdapter، الصنف المساعد المقدم في v1.8.0.
يسحب PDFium الكتل من AStream عند الحاجة فقط، فلا يُنسخ
التدفق إلى الذاكرة: TFileStream فوق ملف PDF بحجم 4 GB، أو TStream
مدعوم بـ HTTP، أو تدفق BLOB لقاعدة بيانات، كلها تصبح قابلة للاستخدام
دون تجهيز الحمولة كاملة في RAM أولًا
يجب أن يدعم AStream البحث (seeking)، ويجب أن يمتد عمره
حتى يُغلق المستند (استدعِ UnloadDocument أو أعِد
Active إلى False). مرر
AOwnsStream = True لتسليم ملكية التدفق إلى هذا
TPdf، فيحرر المهايئ AStream عند تشغيل
UnloadDocument. ومرر False عندما يريد
المستدعي إبقاء التدفق حيًا بعد إغلاق المستند
LoadCustomDocument طريقة منفصلة بقصد (لا overload آخر من
LoadDocument) حتى لا يرتبط المستدعون الذين يمررون صنفًا فرعيًا من
TMemoryStream سهوًا بنسخة overload المخزَّنة
LoadDocument(TMemoryStream, Boolean)، فشكل وسائط Pascal
متطابق لكن الدلالات مختلفة جدًا (مخزَّن مقابل عند الطلب)
تطبق نسخة overload ذات السياسة السلوك نفسه المتوافق أو الصارم أو الاستردادي وتدقيق xref المحدود الموثق في LoadDocument. ويستخدم التدقيق قراءات موضعية ويعيد مؤشر المصدر قبل أن يتابع PDFium وصوله عند الطلب
يحمل TPdfLoadOptions الحقول Mode و AuditByteLimit و MaxIssues و MaxXrefSections و MaxXrefEntries و MaxObjectNumber و ValidateObjectOffsets و RequireFinalEndOfFileMarker، إضافة إلى دالة الصنف Default
Password قبل استدعاء LoadCustomDocument عند فتح مستندات معمَّاةAStream؛ فمن الممكن أن يكون TFileStream أو TMemoryStream أو أي صنف فرعي من TStream يرضى بـ Seek و ReadAOwnsStream = True
// Streaming load with stream ownership transferred to Pdf1
var
Stream: TFileStream;
begin
Stream := TFileStream.Create('C:\Huge.pdf', fmOpenRead or fmShareDenyWrite);
Pdf1.LoadCustomDocument(Stream, True); // Pdf1 frees Stream on UnloadDocument
Pdf1.Active := True;
ShowMessage('Pages: ' + IntToStr(Pdf1.PageCount));
end;
// Externally-owned stream — caller frees it after UnloadDocument
var
Stream: TFileStream;
begin
Stream := TFileStream.Create('C:\Live.pdf', fmOpenRead or fmShareDenyNone);
try
Pdf1.LoadCustomDocument(Stream, False);
Pdf1.Active := True;
DoWork;
Pdf1.Active := False;
finally
Stream.Free;
end;
end;