Standard font advances

Loaded simple PDF text without /Widths uses Adobe core-font horizontal advances for supported characters, preventing cumulative position drift when an installed substitute has different metrics

Supported contract

FamilyExact accepted names
HelveticaHelvetica, Helvetica-Bold, Helvetica-Oblique, Helvetica-BoldOblique
TimesTimes-Roman, Times-Bold, Times-Italic, Times-BoldItalic
CourierCourier, Courier-Bold, Courier-Oblique, Courier-BoldOblique

Each face has 230 decoded Unicode entries: printable ASCII, Latin-1 and defined printable Windows-1252 characters, plus dotless i, Lslash, lslash, caron, breve, dotaccent, ring, ogonek, hungarumlaut, fraction, fi, and fl

U+00A0 uses the space advance and U+00AD uses the hyphen advance; U+00B5 is the Latin-1 micro sign, while Greek U+03BC is outside the table

Raw StandardEncoding byte 39 decodes to U+2019 quoteright; WinAnsi byte 39 decodes to U+0027 quotesingle, which has a different Helvetica advance

Names with subset prefixes, aliases such as Arial or Courier New, different capitalization, Symbol, ZapfDingbats, control characters, Greek letters, and other unsupported Unicode retain the existing fallback behavior

Explicit PDF /Widths are preserved, including deliberately customized advances; font programs and encoding maps remain separate from these tables, and an embedded TrueType fixture with explicit widths is covered by acceptance tests

These are horizontal advances only; they do not supply glyph outlines, bounding boxes, vertical metrics, ligature shaping, or kerning, and a renderer can still paint with an installed substitute while positioning text from standard advances

Measurement and text state

HPDFGetStandardFontWidth performs an immutable table lookup; HPDFMeasureBaseFontWidths combines those results with the existing platform backend when a batch contains fallback characters

The content interpreter continues applying font size, Tc, Tw, Tz, TJ adjustments, text matrices, and the graphics transformation after resolving the advance; the tables do not add automatic kerning to PDF text

Validation and independent reader boundaries

The focused acceptance builds 15 actual PDF pages covering all 12 faces, StandardEncoding quotes and ligatures, WinAnsi punctuation and accented text, explicit widths, an embedded TrueType program, and transformed TJ text; native glyph origins are compared with an independent MuPDF reader

The Unicode advance probe checks all 2,760 table entries; 2,756 agree with MuPDF, while the four Helvetica-family U+2044 fraction entries retain Adobe AFM WX 167 and are reported explicitly because MuPDF returns the slash-like advance 278 for that character

The shared PDF geometry comparison uses characters on which the independent reader agrees; the fraction difference is not reported as a passing cross-reader equivalence

Windows acceptance uses Tests/Delphi/Run-StandardFontMetricsAcceptance.ps1 and also replays existing text extraction and width suites; native Linux acceptance uses Tests/Linux/Run-StandardFontMetricsAcceptance.sh with FPC_EXE, PYTHON_EXE, and HPDF_LINUX_OUTPUT overrides

All executions suppress external reader launching and emit native logs, advance tables, glyph coordinates, a rendered preview, and an independent-proof.json report

Metric basis

Advances are the Adobe core-font AFM WX facts in 1/1000 em; the coordinate and metric convention is documented in the Adobe Font Metrics specification