مرجع HotPDF
تبني HotPDF رسمًا بيانيًا للاعتماديات (dependency graph) فوق حقول الحساب الخاصة بـ AcroForm محمَّل، بحيث تُعيد التغييرات في القيمة حساب الحسابات التي تقرأها بشكل مباشر أو غير مباشر فقط، وبترتيب تكون فيه كل قيمة مُعاد حسابها مرئية بالفعل للحسابات التي تستهلكها
بناء الرسم البياني
تُعيد THotPDF.BuildLoadedFormCalculationGraph لقطة (snapshot) يملكها المستدعي. يصبح كل حقل عقدة؛ ويُحلَّل كل سكربت Calculate مُسجَّل عبر /CO تحليلًا ساكنًا بواسطة HPDFExtractSafeJavaScriptFieldReferences، التي تقرأ أسماء الحقول التي يلمسها سكربت المجموعة الآمنة الفرعية: الوسيطات المقتبَسة لـ AFSimple_Calculate("OP", ["a","b"]) والأسماء المقتبَسة لنداءات getField("x")، مع تخطّي السلاسل الحرفية النصية حتى لا تُعامَل الإشارات النصية كمراجع
تحسم THPDFFormCalcGraph.ResolveLinks تلك الأسماء إلى حواف source → dependent وترتّب الأهداف بفرز طوبولوجي (topological sort). تحافظ الحقول الواقعة على دورة اعتماد على ترتيب مستند /CO بدلًا من ذلك، بما يطابق دلالات المرور الواحد لإعادة الحساب الكاملة؛ لا يُعيد الحقل المتغيّر أبدًا حساب سكربته الخاص، لذا لا يمكن للدورات أن تتأرجح (ping-pong) وتفوز دائمًا القيمة التي يكتبها المستخدم. تُبلَّغ أسماء المصدر التي لا تطابق أي حقل عبر UnresolvedFieldNameCount ولا تُنتج أي حواف، بما يعكس مُحلِّل وقت التشغيل
إعادة الحساب التزايدية
تُقيِّم RecalculateLoadedFormFieldsIncremental فقط الإغلاق (closure) المتأثر بالحقول المتغيّرة المعطاة. تُراكِم عمليات الكتابة عبر SetFormFieldValue وSetLoadedFormFieldValueByName مجموعة قذرة (dirty set)؛ يعيد الحمل الزائد (overload) الخالي من المعطيات الحساب من تلك المجموعة، بحيث يؤدي استيراد FDF أو XFDF متبوعًا بمرور تزايدي واحد إلى تحديث كل حساب تابع دون المساس بغير ذات الصلة. يستهلك كلا الحملَين الزائدَين ومرور RecalculateLoadedFormFields الكامل المجموعة القذرة بعد ذلك
PDF.LoadFromFile('Order.pdf');
PDF.SetLoadedFormFieldValueByName('qty', '3');
PDF.SetLoadedFormFieldValueByName('price', '19.5');
// Recomputes subtotal and total only, chained in one pass
PDF.RecalculateLoadedFormFieldsIncremental(['qty', 'price']);
إعادة الحساب التزايدية
يكشف الرسم البياني عن حالة الحساب لكل حقل (GetNode)، وتسلسل التقييم الكامل (AllTargets)، والإغلاق المتأثر (AffectedTargets)، وعدد الأهداف الواقعة على دورات (CyclicTargetCount)، وأسماء المصادر غير المحلولة، بحيث يمكن للأدوات معاينة الحسابات التي سيُطلقها تعديل ما بدقة