原生 XFA 不存在 Property 的建立
單元:HPDFXFAEventScript,透過 HPDFXFARuntime 與 HPDFXFA 整合
事件存取
JavaScript 表單節點公開 getElement(className, occurrence=0);受支援的不存在 property 會以結構描述預設值建立,重複存取回傳同一個即時 property handle
直接屬性存取(例如 field.font 或 draw.para)在受支援子節點不存在時,會建立第 0 個出現個體
const label = xfa.form.resolveNode("main.row[1].label");
const font = label.getElement("font", 0);
font.typeface = "Helvetica";
font.size = "18pt";
font.fill.color.value = "0,128,255";
label.para.hAlign = "right";
label.border.getElement("edge", 3).thickness = "0.25pt";
occurrence 引數必須是結構描述基數內的非負整數;要求 edge[3] 會先建立前面缺少的 edge 出現個體,各自使用自己的結構描述預設值
受支援的建立路徑
| 父類別 | 受支援的子節點與最大出現次數 |
|---|---|
| field | assist、bind、border、calculate、caption、desc、extras、font、format、keep、margin、para、traversal、ui、validate 與 value:各一;items:兩個 |
| draw | assist、border、caption、desc、extras、font、keep、margin、para、traversal、ui 與 value:各一 |
| ui | extras 與 picture:各一;一個互斥 widget 選擇,如UI Property 覆寫所述 |
| passwordEdit、choiceList 與 checkButton | border、extras 與 margin:各一 |
| font | extras 與 fill:各一 |
| para | hyphenation:一個 |
| border | edge 與 corner:各四個;extras、fill 與 margin:各一 |
| caption | extras、font、margin、para 與 value:各一 |
| margin | extras:一個 |
| fill | color 與 extras:各一;linear、pattern、radial、solid 與 stipple:一個互斥子節點 |
| textEdit | border、comb、extras 與 margin:各一 |
| edge 與 corner | color 與 extras:各一 |
未列出的子類別從 getElement 回傳 null;無效的出現個體與互相衝突的 fill 選擇子節點會讓事件交易失敗
建立中繼資料容器不會執行新存放的腳本;event、calculate 與 validate 行為沿用既有的執行階段執行模型
原生持久化與識別
建立與後續寫入會在所選的重複出現個體底下,發布實際的原生表單封包節點;範本與其他出現個體保留原始值
下一個事件會從已儲存的原生表單封包重建表單限定 property 繫結,因此直接存取與 SOM 解析都看得到建立的階層
保留的 script object 參考在交易成功與執行個體插入後,仍持續指向該原生 property;在執行個體被移除後寫入參考會失敗並還原交易
複製重複原型時也會複製其表單限定 property 結構,新 property 屬性使用結構描述預設值,而不是另一個執行個體的覆寫
引擎失敗與原生變更失敗會還原原生位元組、property 節點、datasets、腳本狀態與執行個體順序;建立共用節點、操作、深度、位元組與值預算
生效消費端與已儲存的 PDF 輸出
欄位與 rich draw 消費端會在實際版面與 flatten 期間讀取建立的 font、fill/color、paragraph 與 border/edge 屬性;後續事件與已儲存 XDP 重新載入都保留這些值
THotPDF.AutoFormAppearances=True 時,XFA 文字欄位會在生效樣式套用後產生其原生外觀,包括受支援的標準字型家族、點數、文字顏色、對齊,以及實線框線顏色與寬度
AutoFormAppearances 仍是明確的文件選項;預設 False 繼續依賴閱讀器產生外觀
建立與格式化消費端的涵蓋是分開的:更多 value 子類別與 widget 結構描述、一般結構描述類別、property 移除/重新掛父、更豐富的 widget 文字與 Unicode 外觀內嵌,仍是進行中的實作目標
相關 API
原生 XFA Property DOM、XFA Property 結構描述預設值、TXFAEventAction 與TXFAEventBinding