Standard font advances

已加载且无 /Widths 的简单 PDF 文本对受支持字符使用 Adobe core-font 水平 advance,避免安装的替代字体度量不同导致的累计位置漂移

受支持契约

字族精确接受的名称
HelveticaHelvetica、Helvetica-Bold、Helvetica-Oblique、Helvetica-BoldOblique
TimesTimes-Roman、Times-Bold、Times-Italic、Times-BoldItalic
CourierCourier、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