我想在Shinyapps.io上的闪亮应用程序中(在情节上)使用自定义字体。我在./www/
目录中有我的Roboto-Regular.ttf。这是我的app.R文件的上部:
dir.create('~/.fonts')
system("chmod +x ./www/Roboto-Regular.ttf")
system("cp ./www/Roboto-Regular.ttf ~/.fonts/")
system('fc-cache -f -v ~/.fonts/')
system('fc-match Roboto')
library(ggplot2)
library(shiny)
library(shinythemes)
library(extrafont)
font_import(pattern="Roboto",prompt=FALSE)
loadfonts()
print(fonts())
在部署该应用程序时,我最终看到一个错误,如下所示:
Registering fonts with R
Scanning ttf files in /usr/share/fonts/, ~/.fonts/ ...
Extracting .afm files from .ttf files...
/home/shiny/.fonts/Roboto-Regular.ttfWarning in gzfile(dest, "w") :
cannot open compressed file '/opt/R/3.5.1/lib/R/library/extrafontdb/metrics/Roboto-Regular.afm.gz', probable reason 'Permission denied'
Error in value[[3L]](cond) : cannot open the connection
Calls: local ... tryCatch -> tryCatchList -> tryCatchOne -> <Anonymous>
Execution halted
有人看到什么错了吗?
答案 0 :(得分:1)
这是我从RStudio收到的有关此问题的答案。我还没有自己测试过。
嗨,
我们的开发人员之所以能够提出这一建议,是因为他们创建 extrafont 和相关的 extrafontdb 软件包时可能做出了不幸的设计选择。 extrafont字体数据库存储在 extrafontdb 程序包目录中-基本上就是 extrafontdb 程序包所使用的全部内容。
这意味着 extrafontdb 目录需要是用户可写的。如果用户安装了该软件包,则可以正常工作,但是如果root用户安装了该软件包(如 shinyapps.io 那样),则它将无法正常工作。
一种可能的解决方法是将 extrafontdb 软件包安装到应用程序子目录中的库中。
要执行此操作:创建一个r-lib/
子目录,然后在其中下载 extrafontdb 源软件包:
dir.create('r-lib')
download.file('https://cran.r-project.org/src/contrib/extrafontdb_1.0.tar.gz','r-lib/extrafontdb_1.0.tar.gz')
部署后,该应用将包含此r-lib/
子目录和 extrafontdb 源程序包。
然后,在应用程序顶部,将源包中的 extrafontdb 包安装到r-lib
目录中。
.libPaths(c('r-lib', .libPaths()))
install.packages('r-lib/extrafontdb_1.0.tar.gz',type = 'source',repos = NULL)
他们在 shinyapps.io 上部署了执行 extrafontdb 安装的应用程序,并且运行良好。设置libpath以便将install.packages()
从提供的源程序包安装到应用程序的r-lib/
子目录中。
如果您能够执行上述操作或有任何其他问题,请告诉我们。
谢谢
答案 1 :(得分:0)
经过一番努力,我发现了一种更简单的解决方案,可以在SomeClass
上使用:
我们在这里:
这将导致IndieFlower.ttf
文件的以下上部:
app.R
由于Linux查找dir.create('~/.fonts')
file.copy("www/IndieFlower.ttf", "~/.fonts")
system('fc-cache -f ~/.fonts')
目录中的字体,因此您不需要.fonts
包,但可以直接使用以下字体:
extrafont
答案 2 :(得分:0)
复活一个老话题,但使用自定义字体没有什么特别之处,只需将其添加到 www 文件夹并创建 CSS 规则以应用于感兴趣的标签。
详情请查看here。