pdf设备和字体系列“Arial”/或:更改PDF格式的字体名称(不是字体)

时间:2012-10-24 11:01:32

标签: r pdf fonts typeface

我在R中有字体和PDF输出问题。在这台Windows机器上没有 Helvetica ,设备使用的字体似乎是 Arial 你可以在下面看到。 简单的问题是,使用了Arial(我希望它是这样),但是使用 Helvetica 来编辑PDF文件。如何让R将正确的名称写入PDF文件。 pdf(...,family="Arial")将不起作用,因为此系列未知(grDevices版本2.15.1)。

或者我可以在PDF中替换此字体,创建一个包含我想要的字体的文件吗?

R-PDF-输出 R Output: Arial Typeface

本文的比较:Arial vs. Helvetica enter image description here

4 个答案:

答案 0 :(得分:2)

您需要设置一个新的字体系列,以便与pdf()一起使用。这要求您为要使用的字体提供Adobe Font Metric文件(*.afm文件)。您可以将.tty个文件转换为.afm个文件,或者在互联网上查找Arial的.afm个文件(如果您还没有)。

Arial <- Type1Font(family = "Arial",
                   metrics = c("ArialMT.afm",
                               "arial-BoldMT.afm", 
                               "Arial-ItalicMT.afm",
                               "Arial-BoldItalicMT.afm"))

其中字符向量metrics包含相关.afm文件的路径,应按以下顺序指定文件:

  1. plain face
  2. 大胆的脸
  3. 斜体脸
  4. 粗体斜体
  5. 您使用pdfFonts()函数为这些新字体添加映射

    pdfFonts(Arial = Arial)
    

    其中ArialType1Font()之前生成的对象。

    最后一步是使用family中的pdf()参数,该参数引用pdfFonts()定义的现有系列之一:

    pdf("testArial.pdf", family = "Arial")
    plot(1:10, 1:10)
    dev.off()
    

    我没有尝试过这个,因为我的系统上没有Arial,也没有太多的.afm文件,但是我从几个来源拼凑了这些文件:

    1. Paul Murrell和Brian Ripley(2006)PostScript和PDF图形中的非标准字体。 R News 6(2):41-47。 PDF
    2. 今年早些时候R邮件列表上的posting by David L. Carlson
    3. 取决于系统设置方式的另一种选择是基于Cairo的PDF设备,因为它将使用系统的功能根据其名称识别和加载字体。有关详细信息,请参阅?cairo_pdf,然后查看?X11开罗字体部分。

答案 1 :(得分:1)

默认情况下,R不嵌入字体。它只是指定使用Helvetica。你可能最好嵌入字体。有两种方法可以执行此操作,使用cairo_pdf设备或extrafont包与常用pdf设备。 cairo_pdf更加简单,但输出与pdf的细微差别有所不同。

答案 2 :(得分:1)

正如其中一条评论中所述,基本14字体不需要嵌入,Helvetica就是这些字体之一.PDF消费者应该为这些字体提供替代品,Arial(或Arial MT)是通常用来代替Helvetica。

我不熟悉R,但你似乎能够embed fonts afterward

编辑:This question's answer解释了如何使用ghostscript嵌入字体,只需确保将GS地图Helvetica(或Arial)映射到您想要的字体版本。感谢Gavin Simpson  让我搜索那个:)

答案 3 :(得分:1)

自R-3.1.0以来,这更直截了当。现在,要获得Arial字体,只需设置family="ArialMT"

pdf("Arial.pdf", height=0.3, width=1.45, family="ArialMT")
grid::grid.text("CGJQRSafrst1237")
dev.off()

2014年4月引用R-3.1.0 release notes

  

pdf()和postscript()有一个新系列“ArialMT”     设备。这只会在查看器上正确呈现     可以访问Monotype TrueType字体(有时是     期刊要求)。

为了确保pdf在任何地方都能正确呈现,您还需要在文档中嵌入所需的Arial字体。这是一个简单的方法:

library(extrafont)
loadfonts()  ## Really only needed the first time you use extrafont
## Modify this to point to the corresponding Ghostscript executable on your own machine
Sys.setenv(R_GSCMD = "C:/Program Files/gs/gs9.07/bin/gswin64c.exe")
embed_fonts("Arial.pdf")