我需要发送带有图表的包,客户端坚持使用自己的许可字体。图表必须呈现为EPS并发送给布局人员以获取报告。
我有字体的.ttf文件,名称如下:
我也有这些文件的.eot,.svg和.woff版本。
所以我尝试了extrafont
包:
ttf_import('Path/To/ttfFiles')
fonts()
[1] "FontNameSans-Bold" "FontNameSans-Light"
[3] "FontNameSans-Medium" "FontNameSans-Regular"
[5] "FontNameSerif-Bold" "FontNameSerif-Light"
[7] "FontNameSerif-Medium" "FontNameSerif-Regular"
我希望看到两个家庭,但这显然不起作用。
最后,ttf文件应该包含在inst
文件夹的子文件夹中,我应该有类似的东西:
.onLoad({
font_import(file.path(system.file(package = 'mypackage'),
"fontdir")
)
# something else to create a family FontName for
# use with postscript() or cairo_ps()
loadfonts()
})
所以我可以稍后做:
setEPS()
postscript('somefile.eps', family = 'FontName Sans')
plot(mydata)
dev.off()
embed_fonts('somefile.eps', outfile = 'somefile-embedded.eps')
问题:我必须采取哪些额外措施才能使家庭像其他家庭一样可用?
编辑:我知道我必须加载字体才能使用它们。但如果注册错误,我无法加载家人。问题是关于正确注册字体系列,以便其余部分正常工作。
这个答案有点晚了,可能你不再需要了。但这可能对搜索中的其他用户感兴趣。
根据您的操作系统,您需要执行不同的步骤。我有一个包含inst/extdata/fonts/some-fonts.ttf
中的几种字体的包。
.ttf
文件复制到C:/ Windows / Fonts。要在加载包时加载字体,我改编了.onLoad
函数:
.onLoad <- function(libname, pkgname) {
if (Sys.info()[1] == "Linux") {
dir.create('~/.fonts')
file.copy("inst/extdata/fonts/some-fonts.ttf", "~/.fonts")
system('fc-cache -f ~/.fonts')
}
if (Sys.info()[1] == "Windows") {
windowsFonts()
extrafont::font_import(pattern = "some-fonts", prompt = FALSE)
extrafont::loadfonts(device = "win")
windowsFonts()
}
print(extrafont::fonts())
}
extrafont::font_import
导入它们并使用extrafont::loadfonts(device = "win")
注册它们。希望这可以帮助你,其他人或我未来的自我。 ;-)