我下面有一个闪亮的应用程序,可以生成和下载pdf和word格式的报告。要运行此程序,您需要将在here中找到的这两个rmd文件保存在同一文件夹中,并安装tinytex。问题是,尽管应正常下载文件,但实际上是在浏览器中打开应用程序时才发生的。当我在本地运行pdf时,它只会打开该文件,而该文档需要重命名,然后单击“保存”以获取该文件。为什么会这样?
library(shiny)
# devtools::install_github("jienagu/noteMD")
library(noteMD)
library(knitr)
library(rmarkdown)
# Define UI for application that draws a histogram
ui <- fluidPage(
# Application title
titlePanel("Old Faithful Geyser Data"),
# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
downloadButton('describe_download',"Download Report",class="butt" ),br(),
tags$head(tags$style(".butt{background-color:#230682;} .butt{color: #e6ebef;}")),
radioButtons('format', 'Document format', c('PDF', 'Word'),
inline = TRUE)
),
# Show a plot of the generated distribution
mainPanel(
fluidRow(
column(12,
helpText("Note: Any comments made in the box will be printed if you download the summary report.") ),
column(12,
tags$textarea(
"Please using any **markdown** syntax!",
id = 'markdowninput',
rows = 3,
style = 'width:100%;')) ),
helpText("Preview:"),
htmlOutput('htmlmarkdown')
)
)
)
# Define server logic required to draw a histogram
server <- function(input, output) {
output$htmlmarkdown = reactive({
note_in_html(input$markdowninput)
})
output$describe_download = downloadHandler(
filename<- function(){
paste("Summary",Sys.Date(),switch(
input$format, PDF = '.pdf', Word = '.docx'
),sep = "")
},
content = function(file) {
if (input$format=="PDF"){
#### Progressing indicator
withProgress(message = 'Download in progress',
detail = 'This may take a while...', value = 0, {
for (i in 1:15) {
incProgress(1/15)
Sys.sleep(0.01)
}
## End of progression
src <- normalizePath('summary_report.Rmd')
# temporarily switch to the temp dir, in case you do not have write
# permission to the current working directory
owd <- setwd(tempdir())
on.exit(setwd(owd))
file.copy(src, 'summary_report.Rmd', overwrite = TRUE)
library(rmarkdown)
out <- render('summary_report.Rmd', pdf_document())
file.rename(out, file)
})
### below is the end of pdf content
}else{
withProgress(message = 'Download in progress',
detail = 'This may take a while...', value = 0, {
for (i in 1:15) {
incProgress(1/15)
Sys.sleep(0.01)
}
## End of progression
src <- normalizePath('summary_report_word.Rmd')
# temporarily switch to the temp dir, in case you do not have write
# permission to the current working directory
owd <- setwd(tempdir())
on.exit(setwd(owd))
file.copy(src, 'summary_report_word.Rmd', overwrite = TRUE)
library(rmarkdown)
out <- render('summary_report_word.Rmd', word_document())
file.rename(out, file)
})
}
})
}
# Run the application
shinyApp(ui = ui, server = server)