This is a python interface to Adobe Font Metrics Files. Although a number of other python implementations exist, and may be more complete than this, it was decided not to go with them because they were either:
It is pretty easy to use, and requires only built-in python libs:
>>> from matplotlib import rcParams
>>> import os.path
>>> afm_fname = os.path.join(rcParams['datapath'],
... 'fonts', 'afm', 'ptmr8a.afm')
>>>
>>> from matplotlib.afm import AFM
>>> with open(afm_fname, 'rb') as fh:
... afm = AFM(fh)
>>> afm.string_width_height('What the heck?')
(6220.0, 694)
>>> afm.get_fontname()
'Times-Roman'
>>> afm.get_kern_dist('A', 'f')
0
>>> afm.get_kern_dist('A', 'y')
-92.0
>>> afm.get_bbox_char('!')
[130, -9, 238, 676]
As in the Adobe Font Metrics File Format Specification, all dimensions are given in units of 1/1000 of the scale factor (point size) of the font being used.
class matplotlib.afm.AFM(fh) [source]
Bases: object
Parse the AFM file in file object fh.
family_name The font family name, e.g., 'Times'.
get_angle(self) [source]
Return the fontangle as float.
get_bbox_char(self, c, isord=False) [source]
get_capheight(self) [source]
Return the cap height as float.
get_familyname(self) [source]
Return the font family name, e.g., 'Times'.
get_fontname(self) [source]
Return the font name, e.g., 'Times-Roman'.
get_fullname(self) [source]
Return the font full name, e.g., 'Times-Roman'.
get_height_char(self, c, isord=False) [source]
Get the bounding box (ink) height of character c (space is 0).
get_horizontal_stem_width(self) [source]
Return the standard horizontal stem width as float, or None if not specified in AFM file.
get_kern_dist(self, c1, c2) [source]
Return the kerning pair distance (possibly 0) for chars c1 and c2.
get_kern_dist_from_name(self, name1, name2) [source]
Return the kerning pair distance (possibly 0) for chars name1 and name2.
get_name_char(self, c, isord=False) [source]
Get the name of the character, i.e., ';' is 'semicolon'.
get_str_bbox(self, s) [source]
Return the string bounding box.
get_str_bbox_and_descent(self, s) [source]
Return the string bounding box and the maximal descent.
get_underline_thickness(self) [source]
Return the underline thickness as float.
get_vertical_stem_width(self) [source]
Return the standard vertical stem width as float, or None if not specified in AFM file.
get_weight(self) [source]
Return the font weight, e.g., 'Bold' or 'Roman'.
get_width_char(self, c, isord=False) [source]
Get the width of the character from the character metric WX field.
get_width_from_char_name(self, name) [source]
Get the width of the character from a type1 character name.
get_xheight(self) [source]
Return the xheight as float.
string_width_height(self, s) [source]
Return the string width (including kerning) and string height as a (w, h) tuple.
class matplotlib.afm.CharMetrics Bases: tuple
Represents the character metrics of a single character.
The fields do currently only describe a subset of character metrics information defined in the AFM standard.
Create new instance of CharMetrics(width, name, bbox)
bbox The bbox of the character (B) as a tuple (llx, lly, urx, ury).
name The character name (N).
width The character width (WX).
class matplotlib.afm.CompositePart Bases: tuple
Represents the information on a composite element of a composite char.
Create new instance of CompositePart(name, dx, dy)
dx x-displacement of the part from the origin.
dy y-displacement of the part from the origin.
name Name of the part, e.g. 'acute'.
matplotlib.afm.parse_afm(fh) [source]
[Deprecated]
Deprecated since version 3.0:
© 2012–2018 Matplotlib Development Team. All rights reserved.
Licensed under the Matplotlib License Agreement.
https://matplotlib.org/3.1.1/api/afm_api.html