Skip to content

Commit 2535508

Browse files
committed
Get names from the original font
Not the subsetted one, since in some cases fontTools.subset does not produce a good name table.
1 parent d509a90 commit 2535508

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

lib/matplotlib/backends/backend_ps.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -222,30 +222,36 @@ def _font_to_ps_type42(font_path, chars, fh):
222222
subset_str = ''.join(chr(c) for c in chars)
223223
_log.debug("SUBSET %s characters: %s", font_path, subset_str)
224224
try:
225-
with _backend_pdf_ps.get_glyphs_subset(
226-
font_path, subset_str
227-
) as subset:
225+
kw = {}
226+
if font_path.endswith('.ttc'):
227+
# fix this once we support loading more fonts from a collection
228+
# https://github.com/matplotlib/matplotlib/issues/3135#issuecomment-571085541
229+
kw['fontNumber'] = 0
230+
with fontTools.ttLib.TTFont(font_path, **kw) as font, \
231+
_backend_pdf_ps.get_glyphs_subset(font_path, subset_str) as subset:
228232
fontdata = _backend_pdf_ps.font_as_file(subset).getvalue()
229233
_log.debug(
230234
"SUBSET %s %d -> %d", font_path, os.stat(font_path).st_size,
231235
len(fontdata)
232236
)
233-
fh.write(_serialize_type42(subset, fontdata))
237+
fh.write(_serialize_type42(font, subset, fontdata))
234238
except RuntimeError:
235239
_log.warning(
236240
"The PostScript backend does not currently "
237241
"support the selected font (%s).", font_path)
238242
raise
239243

240244

241-
def _serialize_type42(font, fontdata):
245+
def _serialize_type42(font, subset, fontdata):
242246
"""
243247
Output a PostScript Type-42 format representation of font
244248
245249
Parameters
246250
----------
247251
font : fontTools.ttLib.ttFont.TTFont
248-
The font object
252+
The original font object
253+
subset : fontTools.ttLib.ttFont.TTFont
254+
The subset font object
249255
fontdata : bytes
250256
The raw font data in TTF format
251257
@@ -280,7 +286,7 @@ def _serialize_type42(font, fontdata):
280286
FontName currentdict end definefont pop
281287
""")
282288

283-
return fmt % (_charstrings(font), _sfnts(fontdata, font, breakpoints))
289+
return fmt % (_charstrings(subset), _sfnts(fontdata, subset, breakpoints))
284290

285291

286292
def _version_and_breakpoints(loca, fontdata):

0 commit comments

Comments
 (0)