type TPdfStreamInspector = class ... end;
| المُنشئ | الوصف |
|---|---|
Create(Source: TStream) | يقرأ مصدر PDF قابلًا للتمرير ضمن ميزانيات افتراضية ويعيد موضعه الأصلي |
Create(Source: TStream; const Options: TPdfStreamInspectOptions) | يقرأ مصدر PDF قابلًا للتمرير ضمن ميزانيات يختارها المستدعي |
Create(const Data: TBytes) | يفحص مصفوفة بايتات PDF موجودة ضمن الميزانيات الافتراضية |
Create(const Data: TBytes; const Options: TPdfStreamInspectOptions) | يفحص مصفوفة بايتات PDF موجودة ضمن ميزانيات يختارها المستدعي |
| الطريقة | الوصف |
|---|---|
CopyRawData(Index, Destination, out Report) | ينسخ الحمولة المرمَّزة الكاملة لكائن تيار واحد |
CopyRawData(Index, Destination, Offset, Count, out Report) | ينسخ نافذة بايتات متحققًا منها دون فك سلسلة المرشحات |
DecodeData(Index, Destination, Level, out Report) | يعيد البيانات الخام أو يطبق المرشحات العامة المدعومة بترتيب إعلانها |
PdfStreamFilterKindFromName(Name) | يعيّن اسم مرشح PDF كاملًا أو مختصرًا إلى TPdfStreamFilterKind |
| الثابت | القيمة | الغرض |
|---|---|---|
PdfStreamInspectDefaultSourceLimit | 512 MiB | أقصى حجم مصدر محتفظ به |
PdfStreamInspectDefaultRawLimit | 256 MiB | أقصى حمولة خام تنسخها عملية واحدة |
PdfStreamInspectDefaultDecodedLimit | 256 MiB | أقصى حمولة مفكوكة تنتجها عملية واحدة |
PdfStreamInspectDefaultExpansionRatio | 100 | أقصى نسبة تمدد من مفكوك إلى مرمَّز |
PdfStreamInspectDefaultMaxStreams | 1,000,000 | أقصى عدد كائنات تيارات يُجرَد |
PdfStreamInspectDefaultDictionaryLimit | 1 MiB | أقصى بايتات قاموس تُفحص لتيار واحد |
| النوع | الوصف |
|---|---|
TPdfStreamFilterKind | يصنف المرشحات كـ psfkUnknown أو psfkASCIIHex أو psfkASCII85 أو psfkLZW أو psfkFlate أو psfkRunLength أو psfkCCITTFax أو psfkJBIG2 أو psfkDCT أو psfkJPX أو psfkCrypt أو psfkBrotli |
TPdfStreamNativeAccess | يختار بلا مسار أصلي، أو وصول كائن صورة، أو وصول ملف مضمَّن |
TPdfStreamDecodeLevel | يختار خامًا، أو مرشحًا عامًا مدعومًا، أو فك السلسلة الكاملة المطلوب |
TPdfStreamReadStatus | يُبلِّغ عن psrsCompleted أو psrsPartiallyDecoded أو psrsInvalidIndex أو psrsInvalidRange أو psrsSourceLimitExceeded أو psrsRawLimitExceeded أو psrsDecodedLimitExceeded أو psrsExpansionRatioExceeded أو psrsUnsupportedFilter أو psrsUnsupportedDecodeParameters أو psrsEncrypted أو psrsExternalData أو psrsMalformed أو psrsWriteError |
TPdfStreamFilterInfo | اسم المرشح و Kind ووجود DecodeParms في HasDecodeParameters و Predictor و Colors و BitsPerComponent و Columns وقيمة LZW EarlyChange |
TPdfStreamFilterInfos | مصفوفة ديناميكية من سجلات TPdfStreamFilterInfo |
TPdfStreamInfo | هوية الكائن (ObjectNumber، Generation، TypeName)، والإزاحات والأطوال (ObjectOffset، DictionaryOffset، DictionaryLength، RawOffset، RawLength، DecodedLengthHint)، وأعلام التخطيط (LengthIsIndirect، UsedEndStreamFallback)، وأعلام التعمية والملف الخارجي (HasExternalFile، IsEncryptedDocument)، وأسماء النوع (SubtypeName)، والحد الأصلي (NativeAccess بقيمة psnaNone أو psnaImageObject أو psnaEmbeddedFile)، وسلسلة Filters المعلنة |
TPdfStreamInfos | مصفوفة ديناميكية من سجلات TPdfStreamInfo |
TPdfStreamInspectOptions | ميزانيات يختارها المستدعي للمصدر والحمولة (MaxRawBytes، MaxDecodedBytes) والتمدد (MaxExpansionRatio) وعدد الكائنات (MaxStreams) والقاموس (MaxDictionaryBytes) والرمز (MaxTokens) والتخصيص (MaxAllocationBytes) والموعد النهائي DeadlineMilliseconds، مع مهيئ Default ساكن |
TPdfStreamReadReport | الحالة وعدّادات البايتات (InputByteCount، OutputByteCount) وأعداد المرشحات المطبقة والمتبقية (AppliedFilterCount، RemainingFilterCount) وفهرس المرشح الفاشل (FailedFilterIndex) ونص ErrorMessage لقراءة واحدة |
| العضو | النوع | الوصف |
|---|---|---|
Count | Integer | عدد كائنات التيار الفيزيائية أو المراجعات الموجودة في المصدر |
Infos[Index] | TPdfStreamInfo | رقم الكائن والتوليد والإزاحات والأطوال والمرشحات و DecodeParms وتصنيف الوصول الأصلي |
Encrypted | Boolean | هل يعلن التذييل عن تعمية المستند |
Options | TPdfStreamInspectOptions | ميزانيات الموارد المطبَّعة التي يستخدمها الفاحص |
SourceByteCount | Int64 | عدد بايتات الإدخال المحتفظ بها للفحص |
psdlRaw ينسخ بايتات التيار المرمَّزة دون تطبيق مرشحاتpsdlGeneral يطبق ASCIIHex و ASCII85 و LZW و Flate و RunLength ومتنبئات TIFF ثمانية البت و PNG، ثم يعيد psrsPartiallyDecoded عند بقاء صورة أو مرمِّز مجهولpsdlFull يتطلب أن تستخدم السلسلة الكاملة المرشحات العامة المدعومة ويعيد psrsUnsupportedFilter بخلاف ذلكpsnaImageObject يوجه المستدعين على مستوى المستند إلى FPDFImageObj_GetImageDataRaw و FPDFImageObj_GetImageDataDecoded الأصلية وواجهات مرشحات الصورpsnaEmbeddedFile يوجه مستدعي المرفقات إلى مسار FPDFAttachment_GetFile الأصليpsrsEncrypted، لأن الواجهة الأصلية العامة لا تفك تعمية تيار غير مباشر اعتباطي برقم كائنيجمع TPdfStreamInspectOptions.Default سقوفه للمصدر والحمولة والتمدد والقاموس والتيار مع سياسة TPdfParserResourceBudget الحالية للرموز والكائنات والبايتات المفكوكة ونسبة التمدد والتخصيص والموعد النهائي
يسجل TPdfStreamReadReport الحالة وعدّادي بايتات الإدخال والإخراج والمرشحات المطبقة والمتبقية وفهرس المرشح الفاشل وأخطاء كتابة الوجهة
يحتفظ التنفيذ الحالي بنسخة مصدر واحدة محدودة الحدود لدعم حل الأطوال غير المباشرة بثقة وقراءات تيار عشوائية متكررة؛ استخدم MaxSourceBytes أدنى عند معالجة تحميلات غير موثوقة ضمن ميزانية ذاكرة أكثر صرامة
var
Inspector: TPdfStreamInspector;
Output: TMemoryStream;
Report: TPdfStreamReadReport;
begin
Inspector := TPdfStreamInspector.Create(PdfBytes);
Output := TMemoryStream.Create;
try
if Inspector.Count > 0 then
Inspector.DecodeData(0, Output, psdlGeneral, Report);
finally
Output.Free;
Inspector.Free;
end;
end;