gpt4 book ai didi

r - 在从 Shiny 应用程序下载的 R Markdown 报告中使用图像

转载 作者:行者123 更新时间:2023-12-02 01:13:20 25 4
gpt4 key购买 nike

我创建了一个非常大的 Shiny 应用程序,其中包含可下载的 pdf 报告。客户要求在 pdf 每页的页眉中添加他们的 Logo 。当 pdf 本身(不是较大的 Shiny 应用程序的一部分)时,我可以在 pdf 上获得 Logo ,但当我尝试从 Shiny 应用程序中下载完全相同的报告时,pandoc 无法找到图像。下面是一个最小的工作示例以及我尝试过但未能成功工作的列表。 smiley.png 位于 app.R 文件夹中,可以替换为任何图像。 smiley.png 与我在完整应用程序中使用的图像不同,因此与原始图像。

编织 rmarkdown 本身效果很好,并且包含标题。尝试从 Shiny 的应用程序内下载会导致问题。
我试过:

  • 将图像移动到名为“images”的文件夹中,并引用 images\smiley.png 而不是 smiley.png。也因同样的错误而失败。
  • 当应用程序上传到shinyapps.io时引用/srv/shiny-server/AppName/smiley.png。失败,无法找到图像(相同类型的错误)。
  • 使用普通 ![Logo](smiley.png)语法而不是四个标题行。也因无法找到 smiley.png 的相同错误而失败
  • <img src="smiley.png" />在我的 www 文件夹中使用 smiley.png 不起作用。我正在编织 pdf,而不是 html。 pdf 针织品,但不包含图像。它只是删除了 html。
  • 使用普通 ![Logo](smiley.png)我的 www 文件夹中的 smiley.png 语法不起作用。同样的错误;找不到笑脸.png。

我最好的猜测是,当应用程序运行时,它会以某种方式在目录中移动,并且 .rmd 无法找到图像。那么我需要引用什么才能找到图像呢?我可以将其放在特定文件夹中吗?我尝试了很多不同的事情并做了很多研究,但很难找到一个类似的例子。我在 Shiny 的应用程序中使用了用于图像的 www 文件夹(下面不包括),添加新文件夹,将图像放在与 .rmd 相同的文件夹中......这是一个非常漫长的研究、试验过程,和错误但没有成功。

应用程序:

library(shiny)
ui<-shinyUI(fluidPage(
titlePanel("Hello Shiny!"),
sidebarPanel(
downloadButton('downloadReport',label="Download Report")
),
mainPanel(
p("Hello")
)
))

server<-shinyServer(function(input, output) {
output$downloadReport <- downloadHandler(
filename = function() {
paste0('Report_.pdf')
},
content = function(file) {
src <- normalizePath('report.rmd')
owd <- setwd(tempdir())
on.exit(setwd(owd))
file.copy(src, 'report.rmd')
library(rmarkdown)
out <- render('report.rmd',pdf_document())
file.rename(out, file)
}
)
})

shinyApp(ui, server)#Runs the app

R markdown 报告.rmd:

---
title: "Test"
date: "Friday, March 04, 2016"
output: pdf_document
header-includes: \usepackage{fancyhdr}
---

\addtolength{\headheight}{1.0cm}
\pagestyle{fancyplain}
\lhead{\includegraphics[height=1.2cm]{smiley.png}}
\renewcommand{\headrulewidth}{0pt}

```{r, echo=FALSE}
plot(cars)
```
```{r, echo=FALSE}
plot(cars)
```

错误:

  C:/Apps/RStudio/bin/pandoc/pandoc report.utf8.md --to latex --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash-implicit_figures --output report.pdf --template C:\Apps\R-3.1.1\library\rmarkdown\rmd\latex\default.tex --highlight-style tango --latex-engine pdflatex --variable geometry:margin=1in  
pandoc.exe: Error producing PDF from TeX source.
! Package pdftex.def Error: File `smiley.png' not found.

See the pdftex.def package documentation for explanation.
Type H <return> for immediate help.
...

l.88 \end{document}

Warning: running command 'C:/Apps/RStudio/bin/pandoc/pandoc report.utf8.md --to latex --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash-implicit_figures --output report.pdf --template C:\Apps\R-3.1.1\library\rmarkdown\rmd\latex\default.tex --highlight-style tango --latex-engine pdflatex --variable geometry:margin=1in' had status 43
Error : pandoc document conversion failed with error 43
In addition: Warning message:
package ‘shiny’ was built under R version 3.1.3
Warning: Error in : pandoc document conversion failed with error 43
Stack trace (innermost first):
55: pandoc_convert
54: render
53: download$func [C:/Data/Documents/Technomic/Testing images/app.R#25]
5: <Anonymous>
4: do.call
3: print.shiny.appobj
2: print
1: source

谢谢!我希望有人有一些想法。我连续几天都在断断续续地研究和尝试。

编辑:修复了输出格式。

最佳答案

终于找到了问题——它根本不在rmarkdown中。我将 report.pdf 复制到临时目录以确保我可以写入它,这意味着报告无法再找到该图像。我所要做的就是将图像也复制到临时目录中。添加了两条新行,现在可以完美运行了!

希望这对其他人有帮助!我知道我花了很长时间寻找这个解决方案,但找不到其他人尝试将图像包含在可下载的报告中。

library(shiny)

# Define UI for application that draws a histogram
ui<-shinyUI(fluidPage(
titlePanel("Hello Shiny!"),
sidebarPanel(
downloadButton('downloadReport',label="Download Report")
),
mainPanel(
p("Hello")
)
))

server<-shinyServer(function(input, output) {
output$downloadReport <- downloadHandler(
filename = function() {
paste0('Report_.pdf')
},
content = function(file) {
src <- normalizePath('report.rmd')
src2 <- normalizePath('smiley.png') #NEW
owd <- setwd(tempdir())
on.exit(setwd(owd))
file.copy(src, 'report.rmd')
file.copy(src2, 'smiley.png') #NEW
library(rmarkdown)
out <- render('report.rmd',pdf_document())
file.rename(out, file)
}
)
})

shinyApp(ui, server)#Runs the app

关于r - 在从 Shiny 应用程序下载的 R Markdown 报告中使用图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35800883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com