如何在matplotlib生成的PDF中嵌入字体?
我在Linux上用matplotlib使用一种叫FreeSans的ttf字体。我创建图形的代码是:
from matplotlib import rc
plt.rcParams['ps.useafm'] = True
rc('font',**{'family':'sans-serif','sans-serif':['FreeSans']})
plt.rcParams['pdf.fonttype'] = 42
plt.figure()
# plot figure...
plt.savefig("myfig.pdf")
当我在其他程序中打开这个图形(比如在Mac OS X上的illustrator)时,字体就不显示了,反而用了默认字体,因为FreeSans在那个程序里找不到。
我该怎么做才能让matplotlib把字体嵌入到它生成的每个PDF文件里?我不介意文件变大。谢谢。
3 个回答
0
我最近也遇到了同样的问题,然后我发现如果在我的mplstyle文件中把“text.usetex”设置为text.usetex : False
,字体就会正常显示。
我试过用“fonttype=42”,但就是不管用。
我觉得问题出在用LaTeX渲染文本的时候,字体没有正确嵌入……我尝试更换字体,但只要text.usetex
设置为True
,我就无法正确嵌入字体。
所以,遗憾的是,目前的解决办法就是关闭LaTeX渲染……
2
你确定它没有在做这个吗?从网站上来看:
matplotlib对文本的支持非常好,包括数学表达式、对真字体的支持,可以输出光栅和矢量图,支持换行的文本和任意角度的旋转,还有对unicode的支持。因为我们会把字体直接嵌入到输出的文档中,比如说postscript或PDF,所以你在屏幕上看到的和打印出来的是一模一样的。
以前,我会输出一个.ps文档,然后使用ps2pdf
命令,加上-dEmbedAllFonts=true
这个选项。
15
我在用matplotlib生成PDF的时候也遇到了同样的问题。
有趣的是,如果我在PDF中指定使用TrueType字体,字体就会被嵌入进去:
matplotlib.rc('pdf', fonttype=42)