在Shinyapps.io上使用自定义字体

时间:2018-08-12 19:38:11

标签: shiny shinyapps

我想在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

有人看到什么错了吗?

3 个答案:

答案 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上使用:

我们在这里:

  1. 将自定义字体放在shinyapps.io目录中,例如herewww
  2. 按照here的步骤操作

这将导致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