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

13

我在Linux上使用名为FreeSans的TTF字体,并使用matplotlib创建了我的图像:

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个回答

14

当使用matplotlib生成PDF时,我遇到了同样的问题。

有趣的是,如果我在PDF中指定使用TrueType字体,则该字体将被嵌入:

matplotlib.rc('pdf', fonttype=42)

2
你确定它现在没有这样做吗?从网站上看:
matplotlib具有出色的文本支持,包括数学表达式、栅格和矢量输出的truetype支持、带任意旋转的分隔文本以及unicode支持。因为我们直接嵌入字体到输出文档中,例如postscript或PDF,所以在屏幕上看到的就是在印刷品中得到的结果。
过去,我曾经输出一个.ps文档,并使用ps2pdf选项中的-dEmbedAllFonts=true。

1
但是当我在Illustrator中打开它时,它会尝试查找FreeSans字体。它说该字体不存在,并提供“嵌入”选项,此时它将使用Illustrator的默认Myriad Pro字体打开PDF文件。因此,除非Illustrator出了问题,否则似乎没有嵌入FreeSans字体? - user248237
2
最可靠的方法是从Xpdf获取pdffonts,然后在PDF上运行它。它会告诉你哪些字体被嵌入其中。 - Nathan Binkert
@user248237,字体已经嵌入。但它不是完整的字体集(只有使用的字符)。这就是为什么Illustrator不能使用它,因为它不存在于系统字体中,只存在于文件中的有限字符集中。 - tiago

0

我最近也遇到了同样的问题,后来发现如果在我的mplstyle文件中使用text.usetex : False关闭"text.usetex"选项,字体就会正常显示。

我尝试过使用"fonttype=42",但它根本不起作用。

我认为问题在于,在使用LaTeX渲染文本时,字体没有被正确嵌入... 我试图更改字体,但只要将text.usetex设置为True,我就无法得到适当嵌入的字体。

因此,不幸的是,当前的解决方案是关闭LaTeX渲染...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接