مرجع HotPDF
يفك ترميز stream PDF محمَّل عبر سلسلة الفلاتر الكاملة الخاصة به، ويكتب المرحلة الأخيرة مباشرة إلى stream مملوك للمستدعي
التصريح
function DecodeLoadedStreamToStream(AStream: THPDFStreamObject;
Output: TStream; out Info: THPDFDecodePipelineInfo): Boolean; overload;
function DecodeLoadedStreamToStream(AStream: THPDFStreamObject;
Output: TStream; CancellationToken: THPDFCancellationToken;
out Info: THPDFDecodePipelineInfo): Boolean; overload;
الوحدة
HPDFDoc
الوحدة
| المرجع | المرجع |
|---|---|
AStream | المرجعTHPDFStreamObjectالمرجع/Filterالمرجع |
Output | المرجع |
CancellationToken | المرجع |
Info | المرجع |
الوحدة
يُعيد True فقط عندما تنجح كل مرحلة مطلوبة
الوحدة
- يكتب الفلتر الأخير إلى
Outputدون إنشاء stream ذاكرة نهائي ثانٍ كامل الحجم - تستخدم المراحل الوسيطة
THPDFAdaptiveTempStreamوتُفرِّغ إلى ملفات مؤقتة مملوكة بعد تجاوزLoadedStreamMemoryThreshold - تبقى كل مرحلة محدودة بـ
DecodeBudgetBytes، ويستهلك كل بايت مفكوك الترميز أيضًا منDocumentDecodeBudgetBytes - يتطلب ASCII85 علامة نهاية دقيقة
~>، ويتطلب ASCIIHex>؛ تفشل خطوط الأنابيب (pipelines) المحمَّلة المشوَّهة بدلًا من قبول بيانات مقتطَعة (truncated) - ترفض
DecodeFilterLimitالمصفوفات ذات الحجم المفرط قبل تخصيص المرحلة - تحدّ
DecodePipelineDepthLimit، وكشف المراجع غير المباشرة الدائرية (cyclic)، وكشف التكرار (recursion) في نفس الـ stream من رسوم الكائنات (object graphs) المعادية - يُستعاد موضع stream المصدر بعد النجاح أو الفشل
- تتشارك مراحل
IHPDFCustomStreamFilterالمسجَّلة نفس الميزانيات الإجمالية وعمق خط الأنابيب - يُعزَل الدفع والسحب المخصصان للمخرجات في تدفق مؤقت تكيفي إلى أن تنجح تلك المرحلة المخصصة
- يُعيد التحميل الزائد الخاص بالإلغاء
dpsCancelledبدلًا من تسريبEHPDFOperationCancelled - يُعزَل الدفع والسحب المخصصان للمخرجات في تدفق مؤقت تكيفي إلى أن تنجح تلك المرحلة المخصصة
الوحدة
THPDFDecodePipelineInfo = record
Status: THPDFDecodePipelineStatus;
InputBytes: Int64;
OutputBytes: Int64;
FilterCount: Integer;
AppliedFilterCount: Integer;
CustomFilterCount: Integer;
CustomFilterFailureCount: Integer;
PipelineDepth: Integer;
StopBeforeLast: Boolean;
FailedFilter: AnsiString;
Diagnostic: AnsiString;
end;
يميّز Status بين الـ streams والفلاتر غير الصالحة، وحدود عدد الفلاتر والعمق، والمراجع الدائرية، والـ streams التكرارية (recursive)، والفلاتر غير المدعومة، وفشل الميزانية، وفشل مفكّك الترميز، والفشل المخصَّص، والإلغاء، وانتهاكات عقد الـ seek
الوحدة
Output := TFileStream.Create('payload.bin', fmCreate);
try
if not PDF.DecodeLoadedStreamToStream(StreamObject, Output, Info) then
raise Exception.Create(String(Info.Diagnostic));
finally
Output.Free;
end;