原生 FreeText 默认外观
原生 FreeText 回退把有界的默认外观状态应用于生成的文本、布局、自动适配和装饰
已提供的 normal 外观优先于从 FreeText 默认外观和富文本生成
默认外观操作符
| 操作符 | 回退行为 |
|---|---|
Tf | 选择原始字体资源和字号;字号为零时请求有界自动适配 |
g rg k | 以灰度、RGB 或 CMYK 初始化文本填充颜色 |
Tc Tw Tz | 把字符间距、单词间距和水平文本缩放应用于绘制和布局测量 |
Ts TL | 应用文本抬升和显式基线间距,包括零或负行距 |
Tm | 最多接受一个矩阵;其线性部分变换生成的文本,而注释布局决定放置位置 |
Tr | 从零到七选择字形绘制和文本裁剪模式 |
G RG K w J j M d | 为文本和生成的装饰初始化描边颜色、宽度、线帽、连接、斜接和虚线状态 |
矩阵平移操作数会被校验,但不会取代 FreeText 在其注释矩形内的放置
水平缩放可以为零或负值;抬升、间距和线性矩阵会参与变换后的字形、步进和装饰几何
这是一个有界的默认外观 profile,不是通用 PDF content-stream 解释器;不受支持的操作符、无效的操作数个数、畸形值和重复的文本矩阵会产生渲染错误
描边颜色分量必须在零到一之间,线帽和连接值必须是从零到二的整数,宽度必须非负,斜接限制至少为一
虚线数组最多包含 256 个非负有限值,非空数组必须包含一个正值;空数组选择实线笔画,奇数长度数组会重复,phase 必须非负
布局、换行与放置
FreeText 对齐使用可见步进做左、中、右放置;当生成的流保留这些片段时,已编码的尾随空格及其源映射保持原样
单词边界换行和硬段落断行分别处理;不换行空格不会变成普通 ASCII 软分隔符
原始 raw-font 路径保留其有界的空格与连字符换行规则;该验收集合不覆盖所有 Unicode 断行、双向文字或复杂 shaping 用例
物理注释矩形、根 Form 边界和内层裁剪保持固定;临时子 Form 边界计入完整的祖先与放置链
字形绘制与文本裁剪
Tr | 字形绘制 | 裁剪贡献 |
|---|---|---|
| 0 | 填充 | 无 |
| 1 | 描边 | 无 |
| 2 | 填充加描边 | 无 |
| 3 | 无字形绘制 | 无 |
| 4 | 填充 | 字形轮廓 |
| 5 | 描边 | 字形轮廓 |
| 6 | 填充加描边 | 字形轮廓 |
| 7 | 无字形绘制 | 字形轮廓 |
模式四到七在同一个文本对象内跨生成的 run 累积字形轮廓;累积的文本裁剪在该文本对象之后应用于后续生成的下划线和删除线装饰
裁剪使用字形轮廓而非扩展的描边轮廓;绘制状态仍然特定于每个 run,外围 graphics-state 作用域限制裁剪的生命周期
初始 DA 描边状态同时应用于根装饰作用域和文本作用域;按 run 的覆盖与 graphics-state 保存/恢复保持原有含义
四个正向裁剪用例是单独的验收门,使用手写的双 run 外观、正向被裁剪的装饰以及字形并集之外的白色采样
该门还使用显式外观的矩形填充见证来测试后端文本裁剪;该见证并不声称缺失外观生成会发出矩形填充
正向 Tr4 到 Tr7 的独立阅读器验证在官方 MuPDF 1.28.5 和 Poppler 上通过了四个有限的双 run 用例,包括两种字形内部、被裁剪的装饰以及字形并集之外的白色采样
单独的仅裁剪测试修订版使用 Scale4 从未改变的页面空间见证点选取完整像素单元;它保留原始颜色阈值,正常渲染保持在 Scale1
MuPDF 1.28.2 存在一个裁剪边界兼容性问题:当颜色变更在同一个文本对象中把前一个 run 在后一个 run 之前冲刷出来时,较早的 run 可能被排除在累积裁剪边界之外
官方 MuPDF 1.28.5 CLI 和独立钉住的 Poppler 接受了这些未改变的外观;阅读器版本和有限正向控制项不等同于对每个渲染 pipeline 的保证
自动适配
DA 字号为零时,从初始生成布局开始有界的收缩与细化搜索,使用变换后的字形路径、步进和装饰,而不只是未变换的行高
描边扩展包含虚线方角线帽和斜接连接的保守变换支持
搜索保留既有的 Cairo 和 FreeType 路径量化;它不承诺数学上最大的理想字号,也不承诺各阅读器间一致的 hinting
如果有界搜索到达最小试探值之前没有试探项可以放下,物理裁剪仍会约束发布;超长内容不保证保持完全可见
原始字体与资源限制
原始内嵌的 Type1C、CIDFontType0C 和裸 Type1 回退已受支持;完整的 OpenType CFF 和 CFF2 default-instance 外观路径保留其已文档化的映射和嵌入规则
独立的裸 CFF2 流和非默认 variation 坐标的选择仍不在已发布的 CFF2 路径之内
token、对象、工作内存、操作、解码数据和输出限制适用于解析、临时资源、适配和发布;取消会在有界工作期间被轮询
失败会保留源图并允许同文档恢复;达到限制不会把部分生成的外观变成成功结果
可复现验收与剩余边界
公开测试套件是 Tests/Linux/AnnotationDefaultAppearance/RunAnnotationDefaultAppearance.py,随其资源和完整的归档 manifest 一起分发
其 normal 模式以最大通道差 2 运行 45 对 candidate/手写 AP、七个原始限制组,以及 epsilon 1e-6 下的独立原始 AP 连续几何
正向原始 AP 阅读器渲染和已知的垂直像素单元观察与连续几何分开记录;无论配对相等还是那些有限观察都不能证明任意的生成候选几何或任意变换后的栅格包络
finite-AP 模式检查六个保留的显式外观仿射和虚线控制项;它不取代 normal 验收、生成候选检查或限制测试
保留的 45 个生成外观在 epsilon 1e-6 下通过了独立的连续几何;其 90 张钉住的 MuPDF 和 Poppler 阅读器图像也通过了独立的全图模型,覆盖全部 3,168,000 个像素单元,最大通道差为零,没有跳过的图像,也没有排除的单元
该有限模型从原始手写外观和字体轮廓推导期望的字形、变换、裁剪、描边和合成,使用每个阅读器钉住的 FreeType 内核;它不从观察到的图像学习期望像素
原始最大通道差保持为 2,墨量阈值保持为 245;这些通过覆盖保留的语料库和钉住的 pipeline,而非任意字体、所有渲染器构建或数学上最大适配字号的证明
Linux 和 Windows FPC 目标要求 FPC 3.3.1 或更高版本;Windows FPC 使用单独验证的私有 NoGUI 依赖构建,且不启动桌面阅读器
相关主题:注释回退、注释装饰、富文本 run 间距、原始 raw-font 外观和 OpenType CFF2 default-instance 外观