גרף תלות בחישובי טופס

HotPDF בונה גרף תלות על פני שדות החישוב של AcroForm שנטען, כך ששינוי ערך מחשב מחדש רק את החישובים שקוראים בו טרנזיטיבית, בסדר שבו כל ערך שחושב מחדש כבר נראה לחישובים הצורכים אותו

בניית הגרף

THotPDF.BuildLoadedFormCalculationGraph מחזיר תמונת סנאפ בבעלות המתקשר. כל שדה הופך לצומת; כל סקריפט חישוב רשום ב-/CO מנותח סטטית עם HPDFExtractSafeJavaScriptFieldReferences, שקורא את שמות השדה שסקריפט תת-קבוצה בטוחה נוגע בהם: הארגומנטים שבמרכאות של AFSimple_Calculate("OP", ["a","b"]) ואת השמות שבמרכאות של גישות getField("x"), כשהליטרלים המחרוזתיים מדולגים כך שאזכורי טקסט אינם נחשבים להפניות

THPDFFormCalcGraph.ResolveLinks פותר את השמות האלה לצלעות source → dependent ומסדר את היעדים במיון טופולוגי. שדות על מחזור תלות שומרים במקום זאת על סדר מסמכי /CO, התואם את סמנטיקת המעבר-האחד של חישוב מחדש מלא; שדה ששונה לעולם אינו מחשב מחדש את הסקריפט של עצמו, כך שמחזורים אינם יכולים להקפיץ הלוך וחזור וערך שנכתב על ידי המשתמש מנצח תמיד. שמות מקור שאינם תואמים לאף שדה מדווחים דרך UnresolvedFieldNameCount ואינם מייצרים צלעות, במקביל לפותר זמן הריצה

חישוב מחדש מצטבר

RecalculateLoadedFormFieldsIncremental מעריך רק את הסכימה המושפעת של השדות הנתונים ששונו. כתיבות דרך SetFormFieldValue ו-SetLoadedFormFieldValueByName צוברות סט מלוכלך; העמסת העומס חסרת הפרמטרים מחשבת מהסט הזה, כך שייבוא 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) ואת שמות המקור הבלתי פתורים, כך שכלי עבודה יכולים לתצפת במדויק אילו חישובים עריכה תפעיל