標準字型 advance

沒有 /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 字元,再加上無點 i、Lslash、lslash、caron、breve、dotaccent、ring、ogonek、hungarumlaut、fraction、fi 與 fl

U+00A0 使用空格 advance,U+00AD 使用連字號 advance;U+00B5 是 Latin-1 的微記號,而希臘字母 U+03BC 不在表內

原始 StandardEncoding 位元組 39 解碼成 U+2019 quoteright;WinAnsi 位元組 39 解碼成 U+0027 quotesingle,後者在 Helvetica 中有不同的 advance

帶 subset 前綴的名稱、Arial 或 Courier New 這類別名、不同大小寫、Symbol、ZapfDingbats、控制字元、希臘字母與其他不受支援的 Unicode,都沿用既有的後備行為

明確的 PDF /Widths 會被保留,包括刻意自訂的 advance;字型程式與編碼映射與這些表無關,而帶明確寬度的內嵌 TrueType 素材已列入驗收測試

這些只是水平 advance;它們不提供 glyph 外框、邊界框、垂直度量、連字 shaping 或 kerning,renderer 仍可以用安裝的替代字型繪製,只是文字定位採用標準 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 座標、render 預覽與獨立的 proof.json 報告

度量依據

advance 是 Adobe core-font 的 AFM WX 事實,單位 1/1000 em;座標與度量慣例記載於Adobe Font Metrics 規格