4

我想在 shinyapps.io 上的闪亮应用程序(在绘图上)中使用自定义字体。我在目录中有我的 Roboto-Regular.ttf ./www/。这是我的 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

有谁看到可能出了什么问题?

4

3 回答 3

8

经过一番挣扎,我找到了一个更简单的解决方案shinyapps.io

开始了:

  1. 将自定义字体放在www目录中:例如IndieFlower.ttf这里
  2. 按照此处的步骤操作

这导致文件的以下上部 app.R

dir.create('~/.fonts')
file.copy("www/IndieFlower.ttf", "~/.fonts")
system('fc-cache -f ~/.fonts')

由于 Linux 会在.fonts目录中搜索字体,因此您不需要该extrafont软件包,但您可以直接使用这些字体,例如:

ggplot(mapping=aes(x=seq(1,10,.1), y=seq(1,10,.1))) +
      geom_line(position="jitter", color="red", size=2) + theme_bw() +
      theme(text=element_text(size = 16, family = "IndieFlower"))
于 2019-03-14T09:42:43.233 回答
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源包。

然后,在应用程序的顶部,将源包中的extrafontdbr-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/

如果您能够执行上述操作或有任何其他问题,请告诉我们。

谢谢,

于 2019-03-07T15:24:09.403 回答
-2

复活一个旧主题,但使用自定义字体没有什么特别之处,只需将其添加到 www 文件夹并创建 CSS 规则以应用于感兴趣的标签。

在此处查看详细信息。

于 2021-06-12T02:32:36.853 回答