Пакет Reporters для загрузки отчета docx из блестящего

Я попытался воспроизвести этот пример в Rstudio. Он работает очень хорошо. Затем я просто собрал все вместе, чтобы загрузить шаблон в блестящем! Но это не работает :

library(shiny)
library(ReporteRs)
library(ReporteRsjars)
library( ggplot2 )
library( magrittr )
library( ggplot2 )
library( magrittr )

ui<-  fluidPage(    

  downloadButton('downloadData', 'Download')

)
server<- function(input, output,session) {

  output$downloadData <- downloadHandler(
    filename = "file.docx",

    content = function(file) {

      target_file <- "bookmark_example.docx" # file to produce 
      template <- system.file(package = "ReporteRs", 
                              "templates/bookmark_example.docx" ) # template example

      doc = docx(template=template)

      ft <- vanilla.table( data = head(iris), add.rownames=TRUE )

      myplot1 <- ggplot(data = iris, aes(Sepal.Length, Petal.Length, color = Species), 
                        alpha = I(0.7) )


      doc %>%
        addParagraph( value = "Jane Doe", stylename = "small", bookmark = "AUTHOR" ) %>%
        addParagraph( value = "John Doe", stylename = "small", bookmark = "REVIEWER" ) %>%
        addFlexTable( flextable = ft, bookmark = "DATA" ) %>%
        addPlot( fun = print, x = myplot1, bookmark = "PLOT" ) %>%
        writeDoc( file = target_file)

    }
  )
}

shinyApp(ui=ui,server=server)

если я запускаю содержимое сервера, не вставляя блестящий, он обновляет мой шаблон, но в блестящем, когда я нажимаю кнопку загрузки, он возвращает:

введите здесь описание изображения

Любая идея, где ошибка???


person Ali Hadjihoseini    schedule 18.09.2017    source источник


Ответы (1)


Пожалуйста, проверьте эту строку и адаптируйте:

writeDoc(file = file) #replace target_file with file

Почему? Функция DownloadHandler принимает два основных аргумента:

1) имя файла - имя, которое получит файл (оценивается только в начале, поэтому поместите его в реактивное выражение на случай, если оно изменится при вводе пользователем).

2) контент - уже заботится о создании для вас временного файла, поэтому вам необходимо предоставить аргумент файла из вашей функции контента.

В противном случае (как в вашем примере) вы создаете второй .docx где-то внутри ShinyApp, не указывая его на функцию содержимого.

person Christian    schedule 18.09.2017
comment
Знаете ли вы, как я могу добавить карту листовок в файл docx с помощью пакета репортеров? - person Ali Hadjihoseini; 18.09.2017
comment
.docx не поддерживает html - хотя это не совсем так, лучше так думать о чем-то более сложном, чем отформатированная таблица. Таким образом, внутри .docx нет поддержки листовок. Переключитесь на rMarkdown, если вам нужно больше свободы. - person Christian; 18.09.2017