【问题标题】:how to embed fonts in PDFs produced by matplotlib?如何在 matplotlib 生成的 PDF 中嵌入字体?
【发布时间】:2012-02-21 17:11:56
【问题描述】:

我在带有 matplotlib 的 Linux 上使用了一种名为 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 中?我不介意文件是否更大。谢谢。

【问题讨论】:

    标签: python pdf matplotlib


    【解决方案1】:

    您确定它还没有这样做吗?来自网站:

    matplotlib 具有出色的文本支持,包括数学 表达式,对栅格和矢量输出的 truetype 支持,换行符 具有任意旋转的分隔文本和 Unicode 支持。因为 我们将字体直接嵌入到输出文档中,例如 postscript 或 PDF,您在屏幕上看到的就是您在硬拷贝中看到的。

    过去,我曾经输出一个 .ps 文档并使用 ps2pdf-dEmbedAllFonts=true 选项。

    【讨论】:

    • 但是当我在 illustrator 中打开它时,它会尝试找到 FreeSans。它说该字体不存在并让我“嵌入”它,在这种情况下,它会使用 Illustrator 的默认 Myriad Pro 字体打开 PDF。因此,除非 Illustrator 搞砸了,否则似乎没有嵌入 FreeSans?
    • 最终要做的事情是从 Xpdf 获取 pdffonts,然后在您的 pdf 上运行它。它会告诉你嵌入了哪些字体。
    • @user248237 字体已嵌入。然而,它不是一套完整的字体(只有使用的字符)。这就是 Illustrator 无法使用它的原因,因为它不作为系统字体存在,而仅作为文件中的有限字符集存在。
    【解决方案2】:

    我在使用 matplotlib 生成 pdf 时遇到了同样的问题。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-22
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      • 2012-11-22
      • 1970-01-01
      • 2012-07-07
      • 1970-01-01
      相关资源
      最近更新 更多