مرجع HotPDF
تُنتج SaveLoadedDocumentDiagnostic مخرجات حتمية وغير مُحزَّمة للفحص والتحرير النصي المضبوط، بينما تُعيد RepairDiagnosticDocument الملف المُحرَّر إلى ملف PDF صالح بنيويًا
سير عمل الذهاب والإياب
- حمّل مستندًا واستدعِ
SaveLoadedDocumentDiagnostic - حرّر قواميس الكائنات أو بايتات التدفق غير المضغوطة دون محاولة الحفاظ على
/Lengthأو صفوف xref أوstartxrefيدويًا - استدعِ
RepairDiagnosticDocumentبخيارات محدودة - افحص
THPDFDiagnosticRepairReportواستخدم الوجهة المُصلَحة فقط عندما تُعيد الطريقةTrue
عقد الإصلاح
- يجب أن يبدأ المصدر برأس PDF وأن يحمل علامة
%QDF-1.0التي تُصدرها HotPDF - تُنسَخ الكائنات غير المباشرة المتحقَّق منها بالترتيب الفيزيائي دون إعادة ترميز السلاسل أو القواميس أو حمولات التدفق
- تُستبدَل قيم
/Lengthالمباشرة وغير المباشرة والمفقودة والقديمة للتدفق بطول الحمولة المقاس - يُعاد بناء جدول xref كلاسيكي، وقيد ختامي (trailer) قانوني، وإزاحة
startxrefدقيقة من مواضع المخرجات المقاسة - يحافظ القيد الختامي (trailer) على قيم
/Infoو/IDو/Encryptالصالحة، ويربط/Rootبكائن Catalog الوحيد المتحقَّق منه - تُكتب الوجهة عبر ملف مؤقت مجاور (sibling)، ولا تستبدل المسار المطلوب إلا بعد نجاح جميع الفحوص
عقد الإصلاح
يفشل الإصلاح بأمان (fail closed) في حالات أرقام الكائنات المكرَّرة، وكائنات Catalog المتعددة أو المفقودة، ومراجع القيد الختامي المكسورة، والبايتات غير التعليقية بين الكائنات، وقواعد الكائن غير الصالحة، وتجاوز حدود الكائنات أو المُدخل، وإزاحات xref الكلاسيكية الأعرض من عشرة أرقام، وإخفاقات التحقق الصارم عند إعادة التحميل
تُتخطّى العلامات (markers) داخل الكائنات المُتحقَّق منها، بحيث لا يصبح النص الشبيه بالكائنات داخل السلاسل النصية وحمولات الـ stream المُرمَّزة إدخال xref
عقد الإصلاح
تُتخطّى العلامات (markers) داخل الكائنات المُتحقَّق منها، بحيث لا يصبح النص الشبيه بالكائنات داخل السلاسل النصية وحمولات الـ stream المُرمَّزة إدخال xref
تحدّ MaxInputBytes وMaxObjectCount وMaxObjectNumber المسح والبيانات الوصفية المحتفَظ بها وصفوف xref المُصدَرة قبل نشر المخرجات
عقد الإصلاح
var
Options: THPDFDiagnosticRepairOptions;
Report: THPDFDiagnosticRepairReport;
begin
Options := THPDFDiagnosticRepairOptions.Default;
Options.MaxInputBytes := Int64(16) * 1024 * 1024 * 1024;
if not THotPDF.RepairDiagnosticDocument(
'edited-diagnostic.pdf',
'repaired.pdf',
Options,
Report
) then
raise Exception.Create(string(Report.Diagnostic));
end;