gpt4 book ai didi

r - 通过 Shiny 将图片上传到 knitr 文档

转载 作者:行者123 更新时间:2023-12-04 08:41:49 24 4
gpt4 key购买 nike

我正在使用 Shiny 和 knitr 的组合来创建 PDF 文档。

目前我想添加功能,允许用户上传将放置在创建的文档中的图片。但是,我真的卡住了,因为我无法获取输入图片的路径。有人可以帮我吗?

简单的例子:

应用:

library(knitr)
library(shiny)

ui <- fluidPage(

sidebarLayout(
sidebarPanel(
fileInput("picture", label = 'Picture'),
downloadButton('report', label = 'Download PDF')
),

mainPanel()
)
)

server <- function(input,output){

picture <- reactive({
input$picture[,4]
})

output$report = downloadHandler(
filename = "test.pdf",

content = function(file){
picture = picture()

out = knit2pdf(input = 'test.Rnw', compiler = 'xelatex', clean = TRUE)
file.rename(out, file)
},

contentType = 'application/pdf'
)
}

shinyApp(ui = ui, server = server)

.Rnw文档:
\documentclass{article}

\begin{document}

Put picture here:
<<echo = FALSE , message = F, results='asis'>>=
cat(paste('\\includegraphics[height=3in]{', picture,'}'))
@

\end{document}

零件 '\includegraphics[height=3in]{', picture,'}显然是造成问题的原因,因为我不知道图片路径只是临时的一个。

最佳答案

你说你使用的是 Shiny Server,那么你应该可以使用图片的完整路径,即使它在一个临时目录中(因为目前 Shiny Server 只适用于 Linux,而 LaTeX 应该可以适用于 Linux 文件路径,例如/tmp/...../yourfile.png)。问题可能是 datapath (即 input$picture[, 4] )没有文件扩展名,因此 LaTeX 无法识别它。您可以尝试检索原始文件的文件扩展名,并将上传的图片复制到具有相同扩展名的临时文件中,例如

picture <- reactive({
path1 <- input$picture$datapath
path2 <- tempfile(fileext = gsub('^(.*)([.].+)$', '\\2', input$picture$name))
file.copy(path1, path2, overwrite = TRUE)
path2
})

关于r - 通过 Shiny 将图片上传到 knitr 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38371863/

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