Matplotlib 如何在输出的PDF中嵌入字体
在使用Matplotlib进行数据可视化并输出PDF文件时,你可能发现在某些计算机上阅读PDF文件时会出现字体错误的问题,导致图表的显示效果不佳。这是因为默认情况下,Matplotlib在生成PDF文件时并不会嵌入字体文件。为了解决这个问题,本文将介绍如何嵌入字体文件以确保PDF文件在任何计算机上都能正常显示。
阅读更多:Matplotlib 教程
了解PDF和字体的关系
在了解如何嵌入字体之前,先来简单了解一下PDF文件和字体的关系。PDF(Portable Document Format)是一种用于交换文档的文件格式,通过将文档的所有内容(文本、图片、表格等)以标准的格式保存到一个文件中,实现在不同平台和程序之间的无缝复制和传递。
字体是PDF文件中的一个重要组成部分,包含文档中使用的所有字母、数字和符号。字体分为两种类型:嵌入式字体和标准字体。标准字体只能在具有相同字体的计算机上正确显示,而嵌入式字体则可以在任何计算机上正确显示,因为字体文件本身已经被嵌入到PDF文件中。
如何嵌入字体?
Matplotlib支持在生成PDF文件时嵌入字体文件,可以通过以下两种方式实现。
1. 在Matplotlibrc文件中设置参数
可以在Matplotlibrc文件中设置默认参数,以在生成任何PDF文件时都自动嵌入字体文件。具体步骤如下:
- 打开Matplotlibrc文件,可以在终端中输入以下命令打开:
$ nano ~/.matplotlib/matplotlibrc
- 找到
pdf.fonttype
并将其设置为42
,表示嵌入式字体,注意#号表示注释,需要删掉注释符号。
pdf.fonttype: 42
如果你是在Windows系统上使用Matplotlib,需要将backend
设置为pdf
,并在pdf.use14corefonts
中设置使用的字体:
backend : pdf
pdf.use14corefonts : True
pdf.fonttype : 42
- 保存修改并关闭文件。
现在,生成的所有PDF文件都将自动嵌入字体文件,即使在其他计算机上打开时也能正常显示。
2. 在Matplotlib代码中设置参数
如果你不想修改默认的Matplotlibrc文件设置,可以在代码中设置参数,仅在需要嵌入字体的PDF文件上使用。具体方法如下:
import matplotlib
from matplotlib import rcParams
rcParams['pdf.fonttype'] = 42
# 绘制图表代码
在代码中,通过设置rcParams['pdf.fonttype']
参数为42
,即可在生成的PDF文件中嵌入字体文件。
如何检查PDF文件是否包含字体?
在生成PDF文件后,我们可以通过以下方法检查文件是否包含嵌入式字体。
1. 使用Adobe Acrobat Pro DC
Adobe Acrobat Pro DC 是一款强大的PDF编辑器,可以打开和编辑PDF文件。在Adobe Acrobat Pro DC中,可以打开PDF文件并检查是否包含嵌入式字体。
- 打开需要检查的PDF文件。
-
点击
文件
->属性
->字体
,可以看到使用的字体名称和类型。如果类型是嵌入,表示字体文件已经被嵌入到PDF文件中。
2. 使用命令行工具pdffonts
pdffonts是一个命令行工具,可以用于检查PDF文件并显示其中使用的字体信息。
- 打开终端并输入以下命令:
$ pdffonts filename.pdf
其中 filename.pdf
是需要检查的PDF文件名。
- 命令行会输出PDF文件中使用的各种字体和字体信息:
name type encoding emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
Arial TrueType WinAnsi yes no yes 6 0
Times TrueType WinAnsi yes no yes 7 0
Symbol TrueType WinAnsi yes no yes 8 0
如果字体信息的最后一列显示“yes”,则表示该字体已经被嵌入到PDF文件中。
注意事项
- 如果你使用的是常规的系统字体,那么这些字体往往已经预装于操作系统中,一般情况下无需嵌入字体即可正常显示。
-
如果你使用自定义字体,那么需要将字体文件嵌入到PDF文件中,如果字体文件过大,可能会导致PDF文件的体积过大,这时建议压缩PDF文件以减小文件大小。
总结
在使用Matplotlib生成PDF文件时,嵌入字体是确保PDF文件在任何计算机上都能正常显示的关键。通过修改Matplotlibrc文件中的默认设置或在代码中设置参数,我们可以很轻松地嵌入字体文件,保证图表在不同设备和平台上的显示效果。我们还介绍了如何检查PDF文件是否包含嵌入式字体以及需要注意的事项,希望能帮助读者更好地应用Matplotlib进行数据可视化。