在 pdf 输出的 header 中渲染 logo.png 有光泽 - Rmarkdown
Render logo.png in header of pdf output shiny - Rmarkdown
这是对这个问题的后续或更多的简化 Error: File header.tex not found in resource path in a rmarkdown generated pdf report from a shiny app
使用这个 Rmarkdown 代码我可以实现我想要的:
logo.png
report.Rmd
---
geometry: margin=20truemm
fontfamily: mathpazo
fontsize: 11pt
documentclass: article
classoption: a4paper
urlcolor: blue
output:
pdf_document:
header-includes:
- \usepackage{fancyhdr}
- \pagestyle{fancy}
- \rhead{\includegraphics[width = .05\textwidth]{logo.png}}
params:
scores: NA
---
<!-- ```{r, echo=FALSE} -->
<!-- hist(params$scores) -->
<!-- ``` -->
```{r}
hist(runif(100))
```
获得所需的输出:R 标志位于 header:
现在我想在闪亮的应用程序中做同样的事情
为此,我将绘图作为 参数 传递,并取消注释 report.Rmd 文件中的相关部分
report.Rmd文件中的相关部分:
```{r, echo=FALSE}
hist(params$scores)
```
app.R
# Global variables can go here
n <- 200
# Define the UI
ui <- bootstrapPage(
numericInput('n', 'Number of obs', n),
plotOutput('plot'),
downloadButton('report', 'Generate Report')
)
# Define the server code
server <- function(input, output) {
output$plot <- renderPlot({
hist(runif(input$n))
})
# create markdown report ----------------------------------
output$report <- downloadHandler(
filename = "report.pdf",
content = function(file) {
tempReport <- file.path(tempdir(), "report.Rmd")
file.copy("report.Rmd", tempReport, overwrite = TRUE)
params <- list(scores = input$n)
rmarkdown::render(tempReport, output_file = file,
params = params,
envir = new.env(parent = globalenv())
)
}
)
}
# Return a Shiny app object
shinyApp(ui = ui, server = server)
错误:
! Package pdftex.def Error: File `logo.png' not found: using draft setting.
我怀疑是因为它在本地工作 logo.png 在 shiny 保存 tempReport 的临时文件中找不到
但我不知道为什么这在从降价编织时有效,而不是在从闪亮的应用程序中调用它时有效。
我想我已经浏览过互联网上的相关网站了!
非常感谢!
基本上你已经知道问题出在哪里了。因此,解决问题的一种方法是将报告模板和徽标复制到同一临时目录。
# Define the server code
server <- function(input, output) {
output$plot <- renderPlot({
hist(runif(input$n))
})
# create markdown report ----------------------------------
output$report <- downloadHandler(
filename = "report.pdf",
content = function(file) {
td <- tempdir()
tempReport <- file.path(td, "report.Rmd")
tempLogo <- file.path(td, "logo.png")
file.copy("report.Rmd", tempReport, overwrite = TRUE)
file.copy("logo.png", tempLogo, overwrite = TRUE)
params <- list(scores = input$n)
rmarkdown::render(tempReport,
output_file = file,
params = params,
envir = new.env(parent = globalenv())
)
}
)
}
这是对这个问题的后续或更多的简化 Error: File header.tex not found in resource path in a rmarkdown generated pdf report from a shiny app
使用这个 Rmarkdown 代码我可以实现我想要的:
logo.png
report.Rmd
---
geometry: margin=20truemm
fontfamily: mathpazo
fontsize: 11pt
documentclass: article
classoption: a4paper
urlcolor: blue
output:
pdf_document:
header-includes:
- \usepackage{fancyhdr}
- \pagestyle{fancy}
- \rhead{\includegraphics[width = .05\textwidth]{logo.png}}
params:
scores: NA
---
<!-- ```{r, echo=FALSE} -->
<!-- hist(params$scores) -->
<!-- ``` -->
```{r}
hist(runif(100))
```
获得所需的输出:R 标志位于 header:
现在我想在闪亮的应用程序中做同样的事情
为此,我将绘图作为 参数 传递,并取消注释 report.Rmd 文件中的相关部分
report.Rmd文件中的相关部分:
```{r, echo=FALSE}
hist(params$scores)
```
app.R
# Global variables can go here
n <- 200
# Define the UI
ui <- bootstrapPage(
numericInput('n', 'Number of obs', n),
plotOutput('plot'),
downloadButton('report', 'Generate Report')
)
# Define the server code
server <- function(input, output) {
output$plot <- renderPlot({
hist(runif(input$n))
})
# create markdown report ----------------------------------
output$report <- downloadHandler(
filename = "report.pdf",
content = function(file) {
tempReport <- file.path(tempdir(), "report.Rmd")
file.copy("report.Rmd", tempReport, overwrite = TRUE)
params <- list(scores = input$n)
rmarkdown::render(tempReport, output_file = file,
params = params,
envir = new.env(parent = globalenv())
)
}
)
}
# Return a Shiny app object
shinyApp(ui = ui, server = server)
错误:
! Package pdftex.def Error: File `logo.png' not found: using draft setting.
我怀疑是因为它在本地工作 logo.png 在 shiny 保存 tempReport 的临时文件中找不到
但我不知道为什么这在从降价编织时有效,而不是在从闪亮的应用程序中调用它时有效。 我想我已经浏览过互联网上的相关网站了! 非常感谢!
基本上你已经知道问题出在哪里了。因此,解决问题的一种方法是将报告模板和徽标复制到同一临时目录。
# Define the server code
server <- function(input, output) {
output$plot <- renderPlot({
hist(runif(input$n))
})
# create markdown report ----------------------------------
output$report <- downloadHandler(
filename = "report.pdf",
content = function(file) {
td <- tempdir()
tempReport <- file.path(td, "report.Rmd")
tempLogo <- file.path(td, "logo.png")
file.copy("report.Rmd", tempReport, overwrite = TRUE)
file.copy("logo.png", tempLogo, overwrite = TRUE)
params <- list(scores = input$n)
rmarkdown::render(tempReport,
output_file = file,
params = params,
envir = new.env(parent = globalenv())
)
}
)
}