尝试从本地闪亮的应用程序下载报告时出现错误

时间:2020-03-03 12:25:13

标签: r shiny download r-markdown knitr

我下面有一个闪亮的应用程序,可以生成和下载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)

0 个答案:

没有答案