PDFium Delphi Component Docs

LoadCustomDocument الطريقة

المكوّن: TPdf  ·  الوحدة: PDFium
يحمّل PDF من أي TStream قابل للبحث باستخدام قارئ كتل PDFium عند الطلب، فلا تحتاج المستندات متعددة الجيجابايت والمصادر البعيدة أو المدعومة بقاعدة بيانات إلى نسخة مسبقة في الذاكرة

الصياغة

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

ملاحظات

مثال

// 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;

انظر أيضًا

LoadDocument, Active, Password, FileName