我创建了一个非常大的闪亮应用程序,其中包含可下载的pdf报告。客户已在pdf的每个页面的标题中请求了他们的徽标。当pdf本身(不是更大的闪亮应用程序的一部分)时,我可以在pdf上获得徽标,但当我尝试从闪亮的应用程序中下载完全相同的报告时,pandoc无法找到图像。下面是一个最小的工作示例和我尝试过但未能开始工作的事项列表。 smiley.png位于app.R文件夹中,可以替换为任何图片。 smiley.png与我在完整应用中使用的图片不同,因此与图片无关。原始图片。
编织rmarkdown本身效果很好并且包含标题。试图从闪亮的应用程序中下载导致问题 我试过了:
![Logo](smiley.png)
语法而不是四个标题行。也失败了同样的错误,无法找到smiley.png <img src="smiley.png" />
不起作用。我正在编织pdf,而不是html。 pdf针织但不包括图像。它只是删除了HTML。 ![Logo](smiley.png)
语法不起作用。同样的错误;找不到smiley.png。 我最好的猜测是,当应用程序运行时,它会以某种方式在目录中移动,而.rmd无法找到图像。那么我需要参考什么才能找到图像?我可以把它放在特定的文件夹中吗?我尝试了很多不同的事情并做了大量的研究,但却找不到一个类似的例子。我在闪亮的应用程序中使用了我用于图像的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降价报告.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
谢谢!我希望有人有一些想法。我几天都在研究和尝试各种事情。
编辑:修正了输出格式。
答案 0 :(得分:7)
终于找到了问题 - 它根本没有在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