自動 XFA 布林樣式與標題
單元:HPDFXFA 與 HPDFXFAHeadless
HPDFXFAWriteHeadlessPDF 會消耗生效的 checkButton 屬性,依實際的 XFA 版面建立原生核取方塊與選擇鈕外觀串流
標記與外框
checkButton 尺寸預設 10pt,控制欄位內容區域中的方形標記區;明確的尺寸量測、欄位與 UI 邊距,以及段落的水平與垂直對齊共同決定其位置
square 與 round 形狀決定外框;預設勾選標記在方形外框中是叉號、圓形外框中是實心圓,遵循XFA 3.3 checkButton 規格
明確的 check、circle、cross、diamond、square 與 star 標記使用真正的向量路徑,不依賴所提供字型是否含有核取方塊符號
第一個 UI 框線 edge 提供其粗細、顏色與可見性;預設外框為黑色、寬 0.5pt,而生效的欄位字型顏色提供勾選標記的顏色
設定的尺寸超過內容區域時,標記會縮到剩餘內容區域;標題或邊距把內容區域擠到不存在時,候選準備會失敗
純量 Unicode 標題
純量標題文字原樣保留 Unicode 與分隔符,並成為真實的內嵌字型 Form XObject,被該 widget 的每個 off、on 與 neutral 外觀引用
標題在各狀態間共用一份外觀與字型圖,其 UTF-16 碼元在 TXFAHeadlessPDFResult.GlyphUnits 中每個 widget 只計一次
left 與 right 預留標題寬度,top 與 bottom 預留高度;省略或為零的 reserve 會以所提供字型的實際 glyph advance 與行度量計算自然標題範圍
行內標題位於標記之前並忽略明確的 reserve;標題邊距把文字內縮到其配置區域內
標題字型大小與填色會覆寫欄位的大小與顏色;標題段落對齊覆寫欄位對齊,而CaptionFontFamilies 可提供實際樣式字體與具名家族
hidden 與 inactive 標題不佔區域、不配置字型圖;invisible 標題保留其區域,但不繪製也不配置標題 glyph
rich 標題消費端還會消耗生效的 XHTML、實際設定的樣式字體與家族選擇、混合行度量與換行後的標題高度
核取方塊第三狀態
啟用 allowNeutral 時,第三個儲存項目就是 neutral 核取方塊匯出;相符的值會保留獨立的原生 /V 與 widget /AS,各有自己的 /AP /N 項目
neutral 外觀繪製空外框與同一份標題,但不繪製勾選標記
核取方塊的 /Opt 陣列為其單一 widget 保留一個 on 匯出項目,這是 PDF 按鈕欄位模型的要求;第三個儲存外觀狀態不會增加第二個 widget 選項
空匯出、保留的 Off 名稱與以 XFAOn 開頭的名稱,會取得無衝突的原生狀態別名:在 XFAOn 之後接上其 UTF-8 位元組的大寫十六進位;第三個原始匯出可從其儲存狀態名稱還原
選擇鈕成員會忽略第三個項目,保留既有的兩態外觀字典與範本/資料範圍群組識別
adapter 會持久化初始狀態圖;應用程式後續的原生按鈕編輯操作有自己獨立的狀態與外觀合約
原生執行個體屬性與交易
checkButton 的尺寸、形狀、標記與 allowNeutral 預設值可透過原生執行階段結構描述取得;不存在的 checkButton 框線與邊距 property 可透過既有的 property 交易建立
生效的重複執行個體 checkButton、caption、font 與 margin 屬性可在 SaveToBytes 後保留,並立即控制對應的自動建立 PDF widget;第一個重複執行個體保留其獨立屬性
字面 UTF-8 事件原始碼與 Unicode 繫結值在已儲存 XDP 轉換前保留其純量,包括被原生 JavaScript 事件修改過的標題文字;詳見HPDFXFAExecuteJavaScriptEvent
腳本失敗會在建立前還原精確的原生 XML,準備失敗會保留目的地的位置、長度與位元組;glyph、物件與字型預算以及取消,沿用自動建立器的交易邊界
驗收素材
Tests/Linux/XFAHeadlessBooleanStylesTests.pas 在沒有閱讀器 UI 的情況下產生真實的標記組、標題、neutral 與保留狀態、重複執行個體腳本變更與回復案例
Tests/Linux/Verify-XFAHeadlessBooleanStyles.py 以 pypdf 與 MuPDF 檢查實際儲存的狀態字典、共用字型資源、標題位置、Unicode 文字與可區分的標記像素
布林 callback 中繼資料描述原生建立器所消耗的加法傳輸提示