مرجع HotPDF
يستطيع HotPDF استرداد رسم بياني حقيقي للكائنات وشجرة صفحات عندما يحتوي PDF على إعلان startxref مفقود أو غير صالح أو قديم، أو صفوف xref غير قابلة للاستخدام
تسلسل الاسترداد
- يُشغَّل أولًا المُحمِّل العادي المتوافق مع المواصفة في الوضع الافتراضي
xrrmOnFailure - يفحص الاسترداد المصدر في أجزاء بحجم 1 ميبيبايت مع ترحيل قصير بين الأجزاء، ويسجل الكائنات غير المباشرة المُتحقَّق منها ومراسي xref
- تُرفَض العلامات المتداخلة داخل كائن غير مباشر مُتحقَّق منه، بما في ذلك السلاسل النصية، والتعليقات، والقواميس، وبيانات stream الثنائية التي تحتوي على نص مثل
99 0 objأوxref - تُجرَّب جداول أو تدفقات xref الصالحة من الأحدث إلى الأقدم عبر أداة التحميل الحالية التزايدية والهجينة وتدفق الكائنات
- تُجرَّب جداول أو تدفقات xref الصالحة من الأحدث إلى الأقدم عبر أداة التحميل الحالية التزايدية والهجينة وتدفق الكائنات
- تُجرَّب جداول أو تدفقات xref الصالحة من الأحدث إلى الأقدم عبر أداة التحميل الحالية التزايدية والهجينة وتدفق الكائنات
- تُجرَّب جداول أو تدفقات xref الصالحة من الأحدث إلى الأقدم عبر أداة التحميل الحالية التزايدية والهجينة وتدفق الكائنات
الإعلانات (Declarations)
type
THPDFXRefRecoveryMode = (
xrrmDisabled,
xrrmOnFailure,
xrrmForce
);
THPDFXRefRecoveryStatus = (
xrrsNotNeeded,
xrrsSucceeded,
xrrsDisabled,
xrrsScanLimitExceeded,
xrrsObjectLimitExceeded,
xrrsXRefLimitExceeded,
xrrsFailed
);
THPDFXRefRecoveryMethod = (
xrrmethodNone,
xrrmethodRelocatedSection,
xrrmethodRebuiltObjectOffsets
);
THPDFParserRecoveryConfidence = (
prcNone,
prcLow,
prcMedium,
prcHigh,
prcVerified
);
THPDFParserRecoveryEvent = record
Kind: THPDFParserRecoveryEventKind;
Confidence: THPDFParserRecoveryConfidence;
FirstByte: Int64;
EndByte: Int64;
ObjectNumber: Integer;
GenerationNumber: Integer;
Message: AnsiString;
end;
THPDFXRefMergeInfo = record
HybridRevisionCount: Integer;
HybridOverlapCount: Integer;
OlderRevisionShadowedEntryCount: Integer;
DuplicateEntryCount: Integer;
NewestRevisionPrecedenceApplied: boolean;
HybridStreamPrecedenceApplied: boolean;
end;
property XRefRecoveryMode: THPDFXRefRecoveryMode;
property XRefRecoveryMaxScanBytes: Int64;
property XRefRecoveryMaxObjects: Integer;
property ParserRecoveryEventLimit: Integer;
property LoadedParserRecoveryEventCount: Integer;
property LoadedParserRecoveryEventDroppedCount: Integer;
function GetLoadedXRefRecoveryInfo(
out Info: THPDFXRefRecoveryInfo
): boolean;
function GetLoadedParserRecoveryEvents:
THPDFParserRecoveryEventArray;
function GetLoadedParserRecoveryEvent(
Index: Integer;
out EventInfo: THPDFParserRecoveryEvent
): boolean;
function GetLoadedXRefMergeInfo(
out Info: THPDFXRefMergeInfo
): boolean;
function GetLoadedXRefIntegrityInfo(
out Info: THPDFXRefIntegrityInfo
): boolean;
الإعلانات (Declarations)
| المرجع | المرجع | المرجع |
|---|---|---|
XRefRecoveryMode | xrrmOnFailure | المرجع |
XRefRecoveryMaxScanBytes | المرجع | المرجع |
XRefRecoveryMaxObjects | المرجع | المرجع |
ParserRecoveryEventLimit | المرجع | المرجع |
الإعلانات (Declarations)
تُعيد GetLoadedXRefRecoveryInfo القيمة True عند محاولة الاسترداد، وتنسخ أحدث سجل THPDFXRefRecoveryInfo
- تميّز
Statusبين النجاح، والاسترداد المعطَّل، وفشل حد البايتات، وفشل حد الكائنات، وفشل حد مراسي xref، والفشل البنيوي - يحدد
Methodقسم xref مُعاد التوطين أو إزاحات كائنات مباشرة مُعاد بناؤها - تُظهر
BytesScannedوCandidateObjectCountوRecoveredObjectCountوDuplicateObjectCountوRejectedCandidateCountوXRefCandidateCountالعمل المحدود وجودة الاسترداد - يحدد
SelectedXRefOffsetالقسم المُعاد توطينه عند نجاح تلك الطريقة - يحتوي
Diagnosticعلى وصف نتيجة موجز بالإنجليزية
الإعلانات (Declarations)
تُعيد GetLoadedParserRecoveryEvents لقطة مملوكة للمستدعي من تدفق الأحداث المحتفَظ به، بينما تقرأ GetLoadedParserRecoveryEvent إدخالًا واحدًا دون تخصيص نسخة من المصفوفة
- يميّز
Kindبين أحداث المحاولة، والسياسة، والحد، ومرشَّح الكائن، ومرشَّح xref، والقسم المختار، والإزاحات المُعاد بناؤها، والنجاح، والفشل FirstByteشاملة وEndByteغير شاملة، وتُضبَط كلتاهما إلى-1عندما لا يوجد نطاق مصدر- تحدد
ObjectNumberوGenerationNumberمرشَّحات الكائن غير المباشر، وتستخدمان-1لأحداث مستوى المستند أو مرسى xref - تتدرج
ConfidenceمنprcNoneعبر نتائج منخفضة ومتوسطة وعالية ومُتحقَّق منها - تُبلغ
LoadedParserRecoveryEventDroppedCountعن الأحداث المُسقَطة بعد تجاوز حد الاحتفاظ المُهيَّأ، محافظةً على ذاكرة محدودة عند الإدخالات العدائية
الإعلانات (Declarations)
تُعيد GetLoadedXRefMergeInfo القيمة True عندما يواجه تحميل xref-stream أو المرجع الهجين حالة دمج تستحق الإبلاغ
- تعد
HybridRevisionCountالمراجعات التقليدية التي ساهمت بـ stream xref جانبي عبر/XRefStm - تعد
HybridOverlapCountإدخالات الجدول التي وفّرها بالفعل stream xref لنفس المراجعة، والتي لها الأولوية - تعد
OlderRevisionShadowedEntryCountالإدخالات المتجاهَلة لأن مراجعة أحدث عرَّفت بالفعل رقم الكائن ذاك - تعد
DuplicateEntryCountالإدخالات المكررة داخل أحدث قسم غير هجين - تشير علامتا الأسبقية (precedence) إلى ما إذا كانت القاعدة المقابلة قد طُبِّقت بدلاً من مجرد توفرها
الإعلانات (Declarations)
تُبلغ GetLoadedXRefIntegrityInfo عن سلسلة القائمة الحرة النشطة، والروابط غير الصالحة، والحلقات، والإدخالات الحرة غير المرتبطة، وأخطاء انتقال الجيل، والتعريفات الحية المكررة، والإدخالات القديمة المُظلَّلة بواسطة أحدث مراجعة
تتضمن تفاصيل التظليل أنواع الإدخالات النشطة والمرفوضة، وحقول الإزاحة أو التخزين، والأجيال، وعمق المراجعة، بحد أقصى ثابت من 256 إدخالًا تفصيليًا
الإعلانات (Declarations)
يستخدم المستند المُسترَد دائمًا مسار إعادة الكتابة الكاملة في SaveLoadedDocument، حتى عندما لا يُعدَّل أي كائن، بحيث لا ينسخ HotPDF أبدًا بايتات المصدر التالفة كإخراج يبدو مُصلَحًا
الإعلانات (Declarations)
var
Info: THPDFXRefRecoveryInfo;
PDF: THotPDF;
begin
PDF := THotPDF.Create(nil);
try
PDF.XRefRecoveryMode := xrrmOnFailure;
PDF.XRefRecoveryMaxScanBytes := Int64(16) * 1024 * 1024 * 1024;
PDF.XRefRecoveryMaxObjects := 3000000;
if PDF.LoadFromFile('damaged.pdf') > 0 then
begin
if PDF.GetLoadedXRefRecoveryInfo(Info) then
WriteLn(Info.Diagnostic);
PDF.SaveLoadedDocument('recovered.pdf');
end;
finally
PDF.Free;
end;
end;