Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork7.9k
Closed
Milestone
Description
Bug summary
On macOS 12, fresh install of conda-forge matplotlib 3.5.0, when saving a figure to pdf, I get:
TTLibError:specifyafontnumberbetween0and5 (inclusive)
which I can trace to:
...~/miniconda3/lib/python3.8/site-packages/matplotlib/backends/backend_pdf.pyinembedTTF(self,filename,characters)1424returnembedTTFType3(font,characters,descriptor)1425eliffonttype==42:->1426returnembedTTFType42(font,characters,descriptor)14271428defalphaState(self,alpha):...
Everything works as expected if I save to a png or if I setpdf.fonttype : 3
in mymatplotlibrc
file and save to pdf.
I can see thatHelvetica*.afm
is present under~/miniconda3/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts
but not under.../ttf
Code for reproduction
importmatplotlib.pyplotaspltplt.plot((1,2,3))plt.title('Axes Title',font='Helvetica')plt.savefig('text.pdf')
Actual outcome
---------------------------------------------------------------------------TTLibErrorTraceback (mostrecentcalllast)/var/folders/bj/czjbfh496258q1lc3p01lyz00000gn/T/ipykernel_58793/3096390865.pyin<module>2plt.plot((1,2,3))3plt.title('Axes Title',font='Helvetica')---->4plt.savefig('text.pdf')~/miniconda3/lib/python3.8/site-packages/matplotlib/pyplot.pyinsavefig(*args,**kwargs)956defsavefig(*args,**kwargs):957fig=gcf()-->958res=fig.savefig(*args,**kwargs)959fig.canvas.draw_idle()# need this if 'transparent=True' to reset colors960returnres~/miniconda3/lib/python3.8/site-packages/matplotlib/figure.pyinsavefig(self,fname,transparent,**kwargs)3010ax.patch._cm_set(facecolor='none',edgecolor='none'))3011->3012self.canvas.print_figure(fname,**kwargs)30133014defginput(self,n=1,timeout=30,show_clicks=True,~/miniconda3/lib/python3.8/site-packages/matplotlib/backend_bases.pyinprint_figure(self,filename,dpi,facecolor,edgecolor,orientation,format,bbox_inches,pad_inches,bbox_extra_artists,backend,**kwargs)2312# force the figure dpi to 72), so we need to set it again here.2313withcbook._setattr_cm(self.figure,dpi=dpi):->2314result=print_method(2315filename,2316facecolor=facecolor,~/miniconda3/lib/python3.8/site-packages/matplotlib/backend_bases.pyinwrapper(*args,**kwargs)1641kwargs.pop(arg)1642->1643returnfunc(*args,**kwargs)16441645returnwrapper~/miniconda3/lib/python3.8/site-packages/matplotlib/_api/deprecation.pyinwrapper(*inner_args,**inner_kwargs)384# Early return in the simple, non-deprecated case (much faster than385# calling bind()).-->386returnfunc(*inner_args,**inner_kwargs)387arguments=signature.bind(*inner_args,**inner_kwargs).arguments388ifis_varargsandarguments.get(name):~/miniconda3/lib/python3.8/site-packages/matplotlib/backends/backend_pdf.pyinprint_pdf(self,filename,dpi,bbox_inches_restore,metadata)2786renderer.finalize()2787ifnotisinstance(filename,PdfPages):->2788file.finalize()2789finally:2790ifisinstance(filename,PdfPages):# finish off this page~/miniconda3/lib/python3.8/site-packages/matplotlib/backends/backend_pdf.pyinfinalize(self)792self.endStream()793self._write_annotations()-->794self.writeFonts()795self.writeExtGSTates()796self._write_soft_mask_groups()~/miniconda3/lib/python3.8/site-packages/matplotlib/backends/backend_pdf.pyinwriteFonts(self)925chars=self._character_tracker.used.get(filename)926ifchars:-->927fonts[Fx]=self.embedTTF(filename,chars)928self.writeObject(self.fontObject,fonts)929~/miniconda3/lib/python3.8/site-packages/matplotlib/backends/backend_pdf.pyinembedTTF(self,filename,characters)1424returnembedTTFType3(font,characters,descriptor)1425eliffonttype==42:->1426returnembedTTFType42(font,characters,descriptor)14271428defalphaState(self,alpha):~/miniconda3/lib/python3.8/site-packages/matplotlib/backends/backend_pdf.pyinembedTTFType42(font,characters,descriptor)1230subset_str="".join(chr(c)forcincharacters)1231_log.debug("SUBSET %s characters: %s",filename,subset_str)->1232fontdata=_backend_pdf_ps.get_glyphs_subset(filename,subset_str)1233_log.debug(1234"SUBSET %s %d -> %d",filename,~/miniconda3/lib/python3.8/site-packages/matplotlib/backends/_backend_pdf_ps.pyinget_glyphs_subset(fontfile,characters)40options.drop_tables+= ['FFTM','PfEd']41--->42withsubset.load_font(fontfile,options)asfont:43subsetter=subset.Subsetter(options=options)44subsetter.populate(text=characters)~/miniconda3/lib/python3.8/site-packages/fontTools/misc/loggingTools.pyinwrapper(*args,**kwds)370defwrapper(*args,**kwds):371withself:-->372returnfunc(*args,**kwds)373returnwrapper374else:~/miniconda3/lib/python3.8/site-packages/fontTools/subset/__init__.pyinload_font(fontFile,options,checkChecksums,dontLoadGlyphNames,lazy)3006lazy=True):3007->3008font=ttLib.TTFont(fontFile,3009checkChecksums=checkChecksums,3010recalcBBoxes=options.recalc_bounds,~/miniconda3/lib/python3.8/site-packages/fontTools/ttLib/ttFont.pyin__init__(self,file,res_name_or_index,sfntVersion,flavor,checkChecksums,verbose,recalcBBoxes,allowVID,ignoreDecompileErrors,recalcTimestamp,fontNumber,lazy,quiet,_tableCache)141file=tmp142self._tableCache=_tableCache-->143self.reader=SFNTReader(file,checkChecksums,fontNumber=fontNumber)144self.sfntVersion=self.reader.sfntVersion145self.flavor=self.reader.flavor~/miniconda3/lib/python3.8/site-packages/fontTools/ttLib/sfnt.pyin__init__(self,file,checkChecksums,fontNumber)58numFonts=header.numFonts59ifnot0<=fontNumber<numFonts:--->60raiseTTLibError("specify a font number between 0 and %d (inclusive)"% (numFonts-1))61self.numFonts=numFonts62self.file.seek(header.offsetTable[fontNumber])TTLibError:specifyafontnumberbetween0and5 (inclusive)
Expected outcome
A pdf file saved to filesystem
Additional information
No response
Operating system
macOS 12, M1 pro, arm64
Matplotlib Version
3.5.0
Matplotlib Backend
No response
Python version
3.8.12
Jupyter version
6.4.6
Installation
conda