原生 Rich Text 欄位
SetRichTextFieldValueWithAppearance 會寫入同步的純文字 V、標準 XHTML RV、RichText 欄位旗標,並為每個既有 widget 產生實際外觀
每個 run 提供 Unicode 文字、字型樣式、正的點數、RGB 顏色、選填的底線或刪除線、段落斷行,以及靠左、置中或靠右對齊;四種樣式字型都是呼叫端提供的 Unicode TrueType 程式,並沿用既有的編輯與內嵌檢查
run 預設使用 12pt regular 黑色樣式;段落對齊取自該段落的第一個 run,未指定時靠左
外觀使用真實內嵌的樣式字型、glyph 對應與量測後的單字片段,並共用行基線;同一 widget 內重複出現的片段會共用各樣式的字型程式
明確的 CR、LF、CRLF、NEL、LINE SEPARATOR 與 PARAGRAPH SEPARATOR 斷行以及段落切換,都需要多行欄位;量測換行、widget 旋轉與裁切都使用實際的 widget 矩形
typed 更新可以在純文字欄位上啟用 rich text,而 password、file-select 與 comb 的組合會在變更前被拒絕
唯讀、MaxLen、已驗證的簽章文件原則、加密表單填寫權限、取消,以及物件、字型、glyph 與輸出預算照樣生效
所有 rich 更新都會在變更文件前備妥 V、RV、Ff 與 AP 覆寫;儲存的字串與串流保留原本的 AES-256 R5 或 R6 原則
樣式陣列、版面行與繪製片段各有 4096 項上限,這是在已設定的文件限制之外;樣式字型位元組以總量計費
對既有 rich 欄位呼叫一般的 SetTextFieldValueWithAppearance,會以提供的純文字樣式取代內容並同步 RV;只寫值的 SetTextFieldValue 呼叫同樣會同步 RV,並保留 NeedAppearances=true
GetRichTextFieldValue 讀取實際儲存的 XHTML 文字字串或 UTF-8 文字串流,包含繼承值
每段的第一個 run 決定該段對齊,即使這個 run 的文字是空的;行內樣式變更與明確斷行都會保留該段對齊
多行換行欄位中超寬的單字會在 Unicode 17 擴充字素邊界切開,保留組合序列、增補純量、emoji 序列與原始 V/RV 文字;寬到無法再切的字素叢集會保持完整並被裁切
矩形與圓形框線在內容裁切之前繪製,選取的多行列會以每個 rich 行量測到的 ascent、descent 與行距繪製實際藍色背景
原生 JSON ABI
{"schemaVersion":1,"type":"forms.fill","fields":[
{"name":"Input","fontFamily":"DejaVu Sans Mono","richTextRuns":[
{"text":"Regular Unicode text "},
{"text":"Bold red text","fontStyle":"bold","fontSize":20,"color":[1,0,0]},
{"text":"Next paragraph","fontStyle":"italic","paragraphBreakBefore":true,
"alignment":"center","underline":true}
]}
]}
richTextRuns 是物件陣列,必填 text,選填 fontStyle、fontSize、color、underline、strikeOut、paragraphBreakBefore 與 alignment;fontStyle 接受 regular、bold、italic 或 boldItalic
選用的 fontFamilies 陣列透過 fontFamily 為每個 run 選出實際的具名字型程式,編輯層級的陣列會覆寫操作層級的陣列,未標註的 run 則使用第一個家族
省略的 run fontSize 在欄位操作 fontSize 為正時沿用之,否則為 12;選填的 value 必須與由 runs 推導的純文字完全一致,明確段落之間以 carriage return 分隔
帶樣式的 run 需要 appearance=true;forms.read 對 rich 欄位會在 richText 回傳實際儲存的 XHTML
ABI 保留既有的操作版面,並在提交新載入的 context 前先備妥完整的 binary 與 result 輸出;寫入失敗或取消會保留原先欄位
驗收與後續工作
Tests/Linux/Run-HeadlessRichTextAcceptance.sh 與 Tests/Linux/HotPDFHeadlessRichTextTests.pas 以實際儲存的 PDF 進行演練;Verify-HeadlessRichText.py 獨立檢查 XHTML、值、四套真實字型程式、glyph 對應、裝飾路徑與可見的 widget 像素
這個 API 接受 typed run,並對完整段落套用預設的 Unicode 17 斷行機會,在樣式切換之間保留單字、不換行空格、標點與數字群組;放得進一整行的群組會以實際樣式字型的 advance 整體移動
樣式群組換行也為混合點數保留共用基線,並在實際版面與標準 XHTML 兩端合併跨樣式接縫的 CRLF
跨樣式的字素排版把完整超寬的邏輯叢集配置到同一實體行,保留實際字型、顏色與尺寸片段,並沿用既有行為:無法切分的叢集寬超過矩形時整體保留
情境接合會參考周圍的 Unicode 文字,每個實際實體行保留段落方向,並在 typed 樣式之間排序混合的 bidi 與文字項目
跨樣式的 mark以真正的 GPOS 附著處理實際的 base、連字與前置 mark glyph,保留各樣式的字型、點數、顏色與可見的 glyph 突出
Rich FDF 與 XFDF 交換把受支援的受限 XHTML 樣式設定檔解碼成實際內嵌字型與已儲存外觀
明確的方向性 embedding、override、isolate 與成對括號情境在 typed 樣式的自動換行後仍然保留;單一共用的邏輯段落順序,同時供給各實體行獨立的重排與原生情境 glyph shaping
只含 Unicode 方向控制字元的叢集會保留原始邏輯值與選取文字,不佔用字元間距;可見叢集與一般空格保留設定的 advance
由段落推導的行序與快取行重排保留完整的 UTF-16 純量邊界,並重設實體行的行尾空白,而不改動共用的段落記錄
具名字型家族為明確的 typed run 與受限 XHTML 提供選取能力,使用真實的家族字型、獨立 advance,並支援家族感知的表單匯入
supplied 家族 fallback 跨越編寫的樣式接縫選取完整字素,Linux JSON 與版本化 callback 把相同行為綁定到實際設定的字型程式
內部樣式表把共用的有界選擇器級聯套用於原生 rich 值與 FDF/XFDF 匯入;更廣的 XHTML/CSS、外部樣式表與一般版面仍在開發中