進階 AcroForm 處理
HotPDF 可以重新計算已載入欄位、重新產生以標準為基礎的可變文字外觀、解析註解外觀狀態,並在不必重寫未動到的頁面之情況下平面化所選的欄位集合
計算順序
RecalculateLoadedFormFields 會遵循已載入的 /AcroForm /CO 陣列,並透過安全的欄位指令碼求值器處理有界的 AFSimple_Calculate 運算 SUM、AVG、PRD、MIN 與 MAX
ApplyLoadedFieldCalculation 會安裝計算動作,並在不產生重複項目的情況下把目標欄位加入 /CO
安全的欄位指令碼
EvaluateLoadedFieldJavaScript 只會求值與所要求之欄位觸發器相關聯的宣告式計算與驗證陳述式
- 運算式支援布林、數字、字串、null、undefined 與陣列值,並包含算術、一元、比較、相等、短路邏輯與條件運算子
event.value保留字串輸入的語意,而數字欄位文字為了與現有計算相容仍保持為數字- 允許清單的輔助函式涵蓋數字與字串轉換、剖析、所選
Math函式、確定性的 UTC 日期剖析與建構,以及有界的字串與陣列檢查 AFSimple_Calculate、AFRange_Validate、event.value指派與event.rc指派提供確定性的計算與驗證結果- 迴圈、動態求值、應用程式存取、提交、匯入、啟動與其他使用中的內容都會遭到拒絕
- 限制為 8,192 個指令碼位元組、32 個陳述式、4,096 個運算式位元組、32 層剖析層級、1,024 個運算、64 個引數、128 個陣列項目、65,536 個字串位元組,以及 262,144 個受追蹤值位元組
可變文字外觀
EnsureLoadedFieldAppearanceStream 會遍歷每個表單物件,並從欄位階層或 AcroForm 繼承 /DA、/Q、/V、/DV、/Ff 與 /MaxLen 的值
- 左、中與右對齊會使用表單物件本地的外觀座標
- 多行文字會接收有界的行放置與裁切
- 零值的預設外觀字型大小會觸發自動調整大小
- 組合型欄位會將每個字元獨立放置在
/MaxLen儲存格的各處
註解外觀狀態
GetLoadedAnnotationAppearanceStream 會解析一般、滑過或按下外觀,並在滑過或按下之後退回一般
狀態字典依序使用 /AS、繼承的 /V 或 /DV、父狀態、/Off 與單一串流遞補
選擇性平面化
FlattenLoadedFormFields 只會將所選表單物件外觀繪製到其所屬頁面、只移除相符的欄位與註解,並保留每一頁未動到的頁面與欄位
預設權限閘會在 DocMDP 之下拒絕結構變更,並在修改任何頁面之前強制 FieldMDP All、Include 與 Exclude 鎖定
PDF.BeginIncrementalUpdate('SignedForm.pdf');
PDF.RecalculateLoadedFormFields;
PDF.FlattenLoadedFormFields(['Subtotal', 'Total']);
PDF.SaveIncrementalUpdate('SignedForm-updated.pdf');