Standard font advances
已加载且无 /Widths 的简单 PDF 文本对受支持字符使用 Adobe core-font 水平 advance,避免安装的替代字体度量不同导致的累计位置漂移
受支持契约
| 字族 | 精确接受的名称 |
|---|---|
| Helvetica | Helvetica、Helvetica-Bold、Helvetica-Oblique、Helvetica-BoldOblique |
| Times | Times-Roman、Times-Bold、Times-Italic、Times-BoldItalic |
| Courier | Courier、Courier-Bold、Courier-Oblique、Courier-BoldOblique |
每个字体面有 230 个已解码 Unicode 条目:可打印 ASCII、Latin-1 和已定义的可打印 Windows-1252 字符,外加 dotless i、Lslash、lslash、caron、breve、dotaccent、ring、ogonek、hungarumlaut、fraction、fi 和 fl
U+00A0 使用空格 advance,U+00AD 使用连字符 advance;U+00B5 是 Latin-1 micro sign,而希腊文 U+03BC 不在表中
原始 StandardEncoding 字节 39 解码为 U+2019 quoteright;WinAnsi 字节 39 解码为 U+0027 quotesingle,后者在 Helvetica 中 advance 不同
带子集前缀的名称、Arial 或 Courier New 之类别名、不同大小写、Symbol、ZapfDingbats、控制字符、希腊字母和其他不受支持 Unicode 保留既有回退行为
显式 PDF /Widths 被保留,包括有意定制过的 advance;字体程序和编码映射与这些表相互独立,带显式宽度的嵌入 TrueType fixture 已由验收测试覆盖
这些只是水平 advance;不提供 glyph 轮廓、包围盒、垂直度量、连字 shaping 或 kerning,渲染器仍可用安装的替代字体绘制,同时按标准 advance 定位文本
测量与文本状态
HPDFGetStandardFontWidth 执行不可变表查找;HPDFMeasureBaseFontWidths 在批次含回退字符时把这些结果与既有平台后端结合
内容解释器在解析 advance 后继续应用字体大小、Tc、Tw、Tz、TJ 调整、文本矩阵和图形变换;这些表不给 PDF 文本添加自动 kerning
验证与独立阅读器边界
聚焦验收构建 15 个真实 PDF 页面,覆盖全部 12 个字体面、StandardEncoding 引号与连字、WinAnsi 标点与变音文本、显式宽度、嵌入 TrueType 程序和变换后的 TJ 文本;原生 glyph 原点与独立 MuPDF 阅读器对比
Unicode advance 探针检查全部 2,760 个表条目;2,756 个与 MuPDF 一致,Helvetica 字族四个 U+2044 fraction 条目保留 Adobe AFM WX 167 并显式报告,因为 MuPDF 对该字符返回类斜杠 advance 278
共享 PDF 几何比较只使用独立阅读器一致的字符;fraction 差异不作为通过的跨阅读器等价来报告
Windows 验收使用 Tests/Delphi/Run-StandardFontMetricsAcceptance.ps1,并重放既有文本提取与宽度套件;原生 Linux 验收使用 Tests/Linux/Run-StandardFontMetricsAcceptance.sh,支持 FPC_EXE、PYTHON_EXE 和 HPDF_LINUX_OUTPUT 覆盖
全部执行都抑制外部阅读器启动,并输出原生日志、advance 表、glyph 坐标、渲染预览和 independent-proof.json 报告
度量依据
advance 是 Adobe core-font AFM WX 事实值,单位 1/1000 em;坐标与度量约定见 Adobe Font Metrics specification