原生富文本字段
SetRichTextFieldValueWithAppearance 为每个既有 widget 写入同步的纯文本 V、规范化 XHTML RV、RichText 字段标志和实际外观
每个 run 提供 Unicode 文本、字体样式、正的点大小、RGB 颜色、可选的下划线或删除线、段落分隔,以及左、中、右对齐;四种样式字体由调用方提供 Unicode TrueType 程序,并沿用既有的编辑与嵌入检查
run 默认使用 12pt 常规黑色样式;段落对齐取自它的第一个 run,未指定时默认左对齐
外观使用真实嵌入的样式字体、glyph 映射和经过测量的单词片段,同一行共享基线;同一 widget 内重复出现的片段共享各自的样式字体程序
显式的 CR、LF、CRLF、NEL、LINE SEPARATOR 和 PARAGRAPH SEPARATOR 换行以及段落切换要求字段为多行类型;测量的折行、widget 旋转与裁剪使用实际的 widget 矩形
类型化更新可以在纯文本字段上启用富文本,而 password、file-select 和 comb 组合会在变更前被拒绝
只读、MaxLen、已认证签名文档策略、加密表单填写权限、取消,以及对象、字体、glyph 和输出预算仍然生效
所有富文本更新都会在改动文档之前先准备好 V、RV、Ff 和 AP 覆盖;保存的字符串和流保留原有的 AES-256 R5 或 R6 策略
样式数组、布局行和绘制片段各有 4096 项的上限,配置的文档限制之上再叠加这一层;样式字体字节按总量计费
对既有富文本字段调用普通的 SetTextFieldValueWithAppearance,会用给定的纯样式替换其内容并同步 RV;只写值的 SetTextFieldValue 调用同样同步 RV 并保留 NeedAppearances=true
GetRichTextFieldValue 读取实际存储的 XHTML 文本字符串或 UTF-8 文本流,包括继承值
每个段落的第一个 run 决定其对齐方式,即使该 run 文本为空;行内样式变化和显式换行不会改变段落对齐
折行多行字段中的超宽单词在 Unicode 17 扩展字形簇边界处拆分,保留组合序列、增补标量、emoji 序列以及原始 V/RV 文本;一个不可再分且宽于字段的簇保持完整并被裁剪
矩形与圆形边框在内容裁剪之前绘制,选中的多行行会按每条富文本行实测的 ascent、descent 和行距绘制真实的蓝色背景
Native 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 必须与从 run 推导出的纯文本完全一致,显式段落之间用回车分隔
带样式的 run 要求 appearance=true;forms.read 对富文本字段返回实际存储的 XHTML 于 richText
ABI 保留既有操作布局,并在提交新加载上下文之前先准备完整的 binary 与 result 输出;写入失败或取消会保留原字段
验收与剩余工作
Tests/Linux/Run-HeadlessRichTextAcceptance.sh 与 Tests/Linux/HotPDFHeadlessRichTextTests.pas 针对真实保存的 PDF 进行验证;Verify-HeadlessRichText.py 独立检查 XHTML、值、四个真实字体程序、glyph 映射、装饰路径和可见 widget 像素
这套 API 接受类型化 run,并在完整段落上消费默认的 Unicode 17 断行机会,跨样式变化保留单词、不换行空格、标点和数字组;放得下一整行的组会带着各自实测的样式字体 advance 一起移动
样式组折行同样为混合点大小保留共享基线,并在实际布局和规范化 XHTML 中跨样式接缝合并 CRLF
跨样式的字形簇排版把完整的超宽逻辑簇分配到同一物理行,保留真实的字体、颜色和大小片段,并对宽于矩形的不可分簇沿用既有裁剪行为
上下文连字使用周围 Unicode 文本判断,每条实际物理行保留段落方向,同时对跨类型样式的混合 bidi 与文字项排序
跨样式标记对真实的基字、连字和前置标记 glyph 使用真正的 GPOS 附加,保留各自的样式字体、点大小、颜色以及可见的 glyph 出头
富 FDF 与 XFDF 交换把受支持的受限 XHTML 样式档案解码为真实嵌入字体和已保存外观
显式的方向嵌入、覆盖、隔离和成对括号上下文在跨类型样式的自动折行中得以保留;一个共享的逻辑段落顺序同时供给独立的物理行重排和原生上下文 glyph shaping
只含 Unicode 方向控制符的簇不消耗字符间距,并保留原始逻辑值和选区文本;可见簇与普通空格保留其配置的 advance
段落推导的行序与 缓存的行重排保留完整的 UTF-16 标量边界,并在不改写共享段落记录的前提下重置物理行尾随空白
命名字体族提供显式的类型化 run 和受限 XHTML 选择,配以真实族字体、独立 advance 和识别字族的表单导入
任意 XHTML 与 CSS、逐 glyph 回退、样式表和通用布局仍是进行中的工作