![](/img/trans.png)
[英]How open PDF file in the same window as R Shiny application works?
[英]how to download quarto pdf reports from R Shiny application
我正在尝试根据用户提供的输入下载 pdf/docx/html 报告。 为此,我创建了一个 Shiny 应用程序和一个带有参数的 qmd 文件。 当我单独渲染它时,qmd 文件工作正常。 但是,如果我呈现相同的文档并尝试从 Shiny 下载它,它就无法工作。 这是我的downloadHandler块
output$report <- downloadHandler(
filename = function() {
paste("report", input$report_file_type, sep = ".")
},
content = function(file) {
output <- quarto::quarto_render(
input = 'report_template.qmd',
output_format = input$report_file_type,
execute_params = list(name = input$author_name,
report_title = input$report_title)
)
file.copy(output, file)
}
)
编辑:这里是 qmd 报告模板
---
title: "`r params$report_title`"
author: "`r params$name`"
date: "`r format(Sys.time(), '%d %B, %Y')`"
format: html
embed-resources: true
params:
report_title: "report title"
name: "author name"
p_list: list("A", "B")
---
Printing each element of the list...
```{r}
#| echo: true
for(p in eval(parse(text = params$p_list))){
print(p)
}
```
Printing the list...
```{r}
#| echo: true
print(eval(parse(text = params$p_list)))
```
我没有收到任何错误,但同时没有任何内容被写入下载文件夹。 似乎呈现的文档没有分配给output 。 也许这就是应对线路不起作用的原因。 可能是什么问题以及如何解决? 提前致谢。
quarto::quarto_render
不返回生成的文件或任何东西,因此您代码中的output
是NULL
,因此您没有得到任何 output。
现在要使此代码正常运行,我们需要将quarto::quarto_render
生成的文件复制到传递给downloadHandler
的content
参数的 function 的file
参数中。
shinyApp(
# UI -----------------------------------------------------------
ui = fluidPage(
textInput("author_name", "Author Name", "John Doe"),
textInput("report_title", "Report Title", "Quarto From Shiny"),
radioButtons(
inputId = "report_file_type",
label = "Report Type",
choices = c("HTML" = "html", "PDF" = "pdf")
),
downloadButton("report", "Generate report")
),
# SERVER --------------------------------------------------------
server = function(input, output) {
output$report <- downloadHandler(
filename = function() {
paste("report", input$report_file_type, sep = ".")
},
content = function(file) {
quarto::quarto_render(
input = "report_template.qmd",
output_format = input$report_file_type,
execute_params = list(
name = input$author_name,
report_title = input$report_title
)
)
# copy the quarto generated file to `file` argument.
generated_file_name <- paste("report_template", input$report_file_type,
sep = ".")
file.copy(generated_file_name, file)
}
)
}
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.