如何在matplotlib生成的PDF中嵌入字体?

13 投票
3 回答
12440 浏览
提问于 2025-04-17 11:54

我在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)

撰写回答