ggplot在pdf中嵌入字体

Posted

技术标签:

【中文标题】ggplot在pdf中嵌入字体【英文标题】:ggplot embedded fonts in pdf 【发布时间】:2015-02-16 23:42:28 【问题描述】:

我一直在使用以下指南将使用ggplot制作的绘图导出为 pdf:plot fonts guide

它在帖子底部提出了一些字体未按应有方式显示的问题,这发生在我下面的示例中。 Bauhaus 93 字体中的文本显示正确,而 Calibri 中的文本显示不正确。

有没有人找到解决这个问题的方法?

library(ggplot2)
library(plyr)
library(grid)
library(gridExtra)
library(extrafont)

data1<-as.data.frame(1:5)
data1[,2]<-as.data.frame(c(1,3,5,7,9))
data1[,3]<-as.data.frame(c(2,4,6,8,10))
colnames(data1)<-c("x","y1","y2")

ggplot(data1, aes(x=x)) + 
  geom_line(aes(y = y1, colour = "Taux selon DEF"), size=0.61, colour="black") +  
  geom_line(aes(y = y2, colour = "Taux selon EC"), size=0.61, colour="black", linetype="dashed") + 
  xlab("X axis lab") + ylab("Y axis lab)") +
  annotate("text", x=1, y=4, label="Some text here", size=2, family="Bauhaus 93") +
  annotate("text", x=4, y=1, label="More text here", size=2, family="Calibri") +
  theme_bw() + theme(legend.title = element_blank(),
                     legend.key = element_rect(fill=NA),
                     panel.border = element_blank(), 
                     axis.line = element_line(colour="black", size=0.25),
                     axis.ticks = element_line(size=0.25),
                     panel.grid.major = element_line(colour = "grey80", size=0.25),
                     panel.grid.minor = element_line(colour = "grey80", size=0.25),
                     axis.text.x = element_text(size=5.5 , lineheight=0.9, hjust=0.5, family="Bauhaus 93"),
                     axis.text.y = element_text(size=5.5 , lineheight=0.9, vjust=0.5, family="Calibri"),
                     axis.title.y = element_text(size=6.1, angle=0, vjust=0.975, face="bold", family="Calibri"),
                     axis.title.x = element_text(size=6.1, angle=0, vjust=-0.20, face="bold", family="Calibri")) +
  scale_x_continuous(expand = c(0, 0), limits=c(0,5)) + 
  scale_y_continuous(expand = c(0, 0), limits=c(0,10)) +
  ggtitle("Title") +
  ggsave("Test.pdf", width=7, height=5)
Sys.setenv(R_GSCMD = "C:/Program Files (x86)/PDF24/gs/bin/gswin32.exe")
embed_fonts("Test.pdf")

【问题讨论】:

最初我遇到了同样的错误,但现在我无法重现它! fonttable() 的输出是什么样的? 以下输出是针对 calibri 系列 65 Calibri Calibri FALSE FALSE FALSE NA 66 Calibri Calibri-Bold TRUE FALSE FALSE NA 67 Calibri Calibri-BoldItalic TRUE TRUE FALSE NA 68 Calibri Calibri-Italic FALSE TRUE FALSE NA 69 Calibri Light Calibri-Light FALSE FALSE FALSE NA 70 Calibri Light Calibri-LightItalic FALSE TRUE FALSE NA 好的,我已经能够在 Windows 上重现该问题:它会产生大量“字体宽度未知”警告,并且所有 Calibri 字符都混杂在一起。这里有一些相关的extrafont问题:github.com/wch/extrafont/issues除了使用不同的字体,我不知道该建议什么! 好的,感谢您的努力。我会坚持使用另一种字体。 【参考方案1】:

尝试将device=cairo_pdf 添加到ggsave() 调用中。这似乎为我解决了这个问题。这样,就不再需要使用embed_fonts()

在此处查看 mgaudet 的评论:https://github.com/wch/extrafont/issues/8

【讨论】:

我还发现使用device=cairo_pdf 会嵌入字体,但这会导致更差的字距调整——有人知道更好的解决方案吗? @user1092247 您请求的字体可能不支持字距调整。请记住,字距调整是由字体设计者完成的,尽管有些系统会忽略这一点。 很好的答案。我发现我必须在ggsave 中增加widthheight 参数才能获得类似于我以前在系统上没有device=cairo_pdf 时获得的结果,然后才能彻底更新到MacOS Sierra 较新版本的 R 不再支持 cairo,这让你得到 failed to load cairo DLL。有什么新想法可以解决这个问题吗?

以上是关于ggplot在pdf中嵌入字体的主要内容,如果未能解决你的问题,请参考以下文章

怎么在PDF文档中内嵌入字体

Itext 在 PDF 中嵌入字体

如何在现有 PDF 中嵌入字体?

IOS在PDF中嵌入字体

如何使用 RDLC 在 PDF 中嵌入字体

如何修复 PDF 文件并嵌入丢失的字体