You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从shinyapps.io下载含多字节字符图表的Rmarkdown PPTX报告

我遇到过类似的问题,核心原因是rmarkdown::render生成pptx时是在独立的R环境中运行的,不会继承你在app里配置好的showtext设置,再加上shinyapps.io本身没有预装日语字体,所以下载的pptx里字符才会缺失。给你一套可行的解决方案:

1. 把日语字体文件加入项目

首先下载一款日语字体(比如Google的Noto Sans JP,免费且兼容性好),将字体文件(例如NotoSansJP-Regular.otf)放到项目根目录下新建的fonts文件夹中。部署到shinyapps.io时,这个文件夹要一起上传。

2. 修改Rmd文件,独立配置showtext

在test.Rmd中,我们需要在渲染环境里重新初始化showtext,同时通过参数接收app里生成的图表:

---
title: "test"
output: powerpoint_presentation
params:
  plot_obj: NULL # 用于接收app传递的图表对象
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, dev = "png") # 指定png设备,适配showtext的字体渲染
library(showtext)
# 注册项目中的日语字体
font_add("notosansjp", regular = "../fonts/NotoSansJP-Regular.otf")
showtext_auto(enable = TRUE)

マルチバイト文字

# 显示从app传递过来的图表
params$plot_obj
### 3. 更新downloadHandler,传递图表对象
修改app的server部分,把生成好的图表通过`params`参数传递给Rmd,确保渲染时能拿到正确的图表:

```r
output$dl <- downloadHandler(
    filename = function(){"test.pptx"},
    content = function(con){
      rmarkdown::render(
        input = "test.Rmd", 
        output_file = con,
        params = list(plot_obj = tempplot()) # 将reactive生成的图表传入Rmd
      )
    }
  )

额外提醒

  • 部署时确认fonts文件夹被包含在shinyapps.io的部署包中(rsconnect通常会自动检测,若未检测到可手动添加)。
  • 如果使用其他日语字体,记得调整font_add中的文件路径和字体名称。
  • 指定dev="png"是因为showtext对光栅图形设备的字体渲染更稳定,能避免矢量设备下的字符丢失问题。

这样修改后,生成的pptx文件就能和app中显示的一样,正常展示日语多字节字符了。

内容的提问来源于stack exchange,提问作者ironwest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 18:57:41