原生 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 出現個體,各自使用自己的結構描述預設值

受支援的建立路徑

父類別受支援的子節點與最大出現次數
fieldassist、bind、border、calculate、caption、desc、extras、font、format、keep、margin、para、traversal、ui、validate 與 value:各一;items:兩個
drawassist、border、caption、desc、extras、font、keep、margin、para、traversal、ui 與 value:各一
uiextras 與 picture:各一;一個互斥 widget 選擇,如UI Property 覆寫所述
passwordEdit、choiceList 與 checkButtonborder、extras 與 margin:各一
fontextras 與 fill:各一
parahyphenation:一個
borderedge 與 corner:各四個;extras、fill 與 margin:各一
captionextras、font、margin、para 與 value:各一
marginextras:一個
fillcolor 與 extras:各一;linear、pattern、radial、solid 與 stipple:一個互斥子節點
textEditborder、comb、extras 與 margin:各一
edge 與 cornercolor 與 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