Ich verwende eine Kombination aus Shiny und Knitr, um PDF-Dokumente zu erstellen.Bild wird über Shiny in das Knitr-Dokument hochgeladen
Momentan möchte ich eine Funktion hinzufügen, mit der Benutzer Bilder hochladen können, die in das erstellte Dokument eingefügt werden. Ich stecke jedoch wirklich fest, weil ich den Pfad des Eingangsbildes nicht erkennen kann. Könnte mir jemand dabei helfen?
Einfaches Beispiel:
Anwendung:
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)
und das .Rnw
Dokument:
\documentclass{article}
\begin{document}
Put picture here:
<<echo = FALSE , message = F, results='asis'>>=
cat(paste('\\includegraphics[height=3in]{', picture,'}'))
@
\end{document}
Teil '\includegraphics[height=3in]{', picture,'}
offensichtlich das Problem verursacht, weil ich weiß nicht, den Bildpfad nur vorübergehend ein.
hochgeladen Dateipfad ist 'Eingang $ Bild datapath' –
Ja $, aber es ist Pfad zu temporäres Verzeichnis, und ich habe keine Ahnung, wie es funktioniert. Außerdem ist $ datapath gleich wie [, 4] in meinem Code. –
Versuchen Sie 'paste' durch' paste0' in Ihrer '.Rnw' Datei zu ersetzen, da sonst hinter dem Dateinamen ein Leerzeichen steht und das Bild nicht gefunden wird. – NicE