FormCalc Locale 與 Picture 函式

啟用 TXFAWidgetRuntimeOptions.ScriptOptions.EnableJavaScript,即可透過隨附的 QuickJS 引擎在一般 FormCalc 事件與 calculate、validate script 中使用這些函式

Locale 選擇

執行中的欄位會從其祖系繼承最近一個非空的 locale 屬性;整條鏈都為空時,選用設定的原生 Windows 或 Linux ICU locale

文件的 localeSet 項目會覆寫原生的數字/貨幣符號、月/日/上午下午名稱與日期/時間/數字模式;缺少的值繼承系統資料,自訂 locale 名稱則退回 en_US

Locale 識別碼接受底線與連字號拼法,大小寫不敏感;Concat("de", "_DE") 這類計算出的名稱會在執行期解析

內部 locale 請求共用事件期限,允許 64 次具名查詢、每個識別碼 256 個 UTF-16 code unit,以及合計 2 MiB 的中繼資料;重試會還原 JavaScript 檢查點,已提交工作階段的重播則直接使用記錄的中繼資料,不再呼叫 provider

Picture 函式

函式行為
Format(picture, value, ...)使用 date、time、datetime、num 或 text 子句格式化值;標準複合子句格式化同一個值,選填的擴充則接受對應的值參數
Parse(picture, text)把帶型別子句、複合子句或替代項解析成 ISO 日期/時間文字、十進位數值文字,或移除常值後的文字

用 date(de_DE){D. MMMM YYYY} 指定明確 locale、用 num.currency 指定 locale 樣式,用豎線表示替代項;加引號的常值與雙撇號可保留常值字元

日期、時間與 datetime 樣式使用解析後的 default、short、medium、long 或 full 模式;標準 localeSet 數字模式同時提供 num.decimal 與其整數部分給 num.integer

日期/時間 picture 支援年、月、日、星期名稱、12/24 小時制、分、秒、小數毫秒、上午下午與明確的 GMT/UTC 偏移;無效日期(如 2 月 30 日)回傳空文字

數值 picture 支援必填的 9、選填的 z、補空格的 Z、小數/群組分隔符、貨幣符號與 ISO 貨幣碼、百分比、正負號、括號、借貸後綴,以及隱含小數基點

文字 picture 支援 A 代表 Unicode 字母、O 或 0 代表 Unicode 英數字元、9 代表數字、X 代表 Unicode code point,包括增補字元

進階 picture 子句加入數值科學記號與保留小數精度、序數與週日期、更多時制、全域字元/空白符號,以及複合輸入解析

傳入 null 參數回傳 null;無效 picture、無效值或不可用的 locale 回傳空文字

target = Format("num(de_DE){z,zz9.99}", 1234.5)
target = Parse("date{MMM D, YYYY}", "Sep 1, 2002")
target = Format("date{YYYY-MM-DD} 'at' time{HH:MM}", "2024-03-15T13:45:09")

日期與時間函式

函式參數與結果
DateFmt(style=0, locale)、TimeFmt(style=0, locale)回傳 XFA 模式:default 0、short 1、medium 2、long 3 或 full 4;無效樣式選用 default
Date2Num(text, picture, locale)回傳序數天數,以 1900-01-01 為第 1 天;省略 picture 時使用 locale 預設值,也接受 ISO 日期
Num2Date(serial, picture, locale)以提供或預設的 locale 日期 picture 格式化序數天數
IsoDate2Num(text)解析緊湊或帶連字號的 ISO 日期,包括選填的時間後綴
IsoTime2Num(text)、Time2Num(text, picture, locale)回傳自 GMT 午夜起算加 1 的毫秒數;明確偏移會被套用,缺少偏移時使用目前時區
Num2GMTime(serial, picture, locale)、Num2Time(serial, picture, locale)以 GMT 或目前時區格式化 1 到 86400000 的時間序數
Date()、Time()回傳目前日期/時間序數;工作階段重播期間使用記錄的時鐘輸入

省略 picture 的 Num2Date 現在產生在地化輸出;需要 ISO 輸出的呼叫端請改用 Num2Date(serial, "YYYY-MM-DD")

單位、編碼與文字工具

函式參數與結果
UnitType(measurement)識別 in、cm、mm、pt、pc 與 mp 別名;無法識別的單位預設為英吋
UnitValue(measurement, targetUnit="in")轉換度量單位:每英吋 72 points、每 pica 12 points、每 point 1000 millipoints
Encode(text, encoding="url")、Decode(text, encoding="url")支援 URL 跳脫、XML 實體,以及經 Unicode scalar 驗證的 HTML 具名/數字實體
Uuid(style=0)回傳 32 個十六進位數字,或樣式 1 的帶連字號形式,含 version 4 與 variant 位元;重播使用記錄的隨機輸入
WordNum(value, style=0, locale)產生英文數字詞、樣式 1 的美元金額,或樣式 2 的美元與美分;無效數值範圍回傳星號

目前 picture 的界限

替代紀元、表意或全形表示、在地化數字符號、僅顯示用的在地化模式符號,以及完整的分組政策仍是獨立目標;WordNum 輸出英文單字

原生純量求值器保留既有的 ISO 與財務函式;locale/picture 函式需要一般執行環境

較底層的 API

TXFALocaleData、HPDFXFALoadLocale、HPDFXFALoadDocumentLocale 與 HPDFXFALocaleJavaScript 公開 Unicode locale 中繼資料與安全的引擎序列化

HPDFXFAExecuteJavaScriptEvent 接受 TXFALocaleDataProvider,用於自訂的唯讀中繼資料查詢