FormCalc locale 与 picture 函数

启用 TXFAWidgetRuntimeOptions.ScriptOptions.EnableJavaScript 即可在通用 FormCalc 事件与 calculate、validate 脚本中通过随附的 QuickJS 引擎使用这些函数

locale 选择

执行字段从其祖先继承最近的非空 locale 属性;空链选择配置的原生 Windows 或 Linux ICU locale

文档 localeSet 条目覆盖原生数字/货币符号、月/日/午前午后名称与日期/时间/数字模式;缺失值继承系统数据,自定义 locale 名以 en_US 兜底

locale 标识符接受下划线与连字符拼写,大小写不敏感;Concat("de", "_DE") 之类的计算名在执行时解析

内部 locale 请求共享事件 deadline,允许 64 次具名查询、每标识符 256 个 UTF-16 码元与 2 MiB 聚合元数据;重试会恢复 JavaScript 检查点,已提交的会话重放消费记录的元数据而不再调用提供方

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.integer 提供 num.decimal 及其整数部分

日期/时间 picture 支持年、月、日、星期名、12/24 小时制、分、秒、小数毫秒、午前午后以及显式 GMT/UTC 偏移;无效日期(如 2 月 30 日)返回空文本

数值 picture 支持强制的 9、可选的 z、空格填充的 Z、小数/分组分隔符、货币符号与 ISO 货币码、百分号、正负号、括号、借贷后缀与隐含小数基点

文本 picture 支持 A 表示 Unicode 字母、O 或 0 表示 Unicode 字母数字、9 表示数字、X 表示 Unicode 码点,包括增补字符

进阶 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)返回 default 0、short 1、medium 2、long 3 或 full 4 的 XFA 模式;无效样式选择 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 点、每 pica 12 点、每点 1000 毫点换算度量
Encode(text, encoding="url"), Decode(text, encoding="url")支持 URL 转义、XML 实体与 HTML 具名/数字实体,带 Unicode 标量校验
Uuid(style=0)返回 32 个十六进制数字或带连字符的样式 1,含版本 4 与变体位;重放使用记录的随机输入
WordNum(value, style=0, locale)产生英文数字单词、样式 1 的美元金额或样式 2 的美元与美分;无效数值域返回星号

当前 picture 边界

替代纪元、表意或全角表示、本地化数字字母表、本地化仅显示模式符号与完整的分组策略仍是独立目标;WordNum 输出英文单词

原生 scalar 求值器保留其既有的 ISO 与财务函数;locale/picture 函数需要通用执行

更底层的 API

TXFALocaleData、HPDFXFALoadLocale、HPDFXFALoadDocumentLocale 与 HPDFXFALocaleJavaScript 暴露 Unicode locale 元数据与安全的引擎序列化

HPDFXFAExecuteJavaScriptEvent 接受 TXFALocaleDataProvider 用于自定义只读元数据查询