我已经使用this answer在我的闪亮应用中嵌入了pdf。当我首先通过闪亮的UI输入生成pdf并使用操作按钮“提交”时,pdf将从UI输入生成并在Viewer中显示。
但是,当我通过UI更改文档并再次提交时,即使文件内容已更改,查看器仍会显示旧报告。
如何强制它显示新的pdf?
这是我的问题的可重复示例,在浏览器中打开时效果最佳。
ui.R
library(shiny)
shinyUI(fluidPage(
# Application title
titlePanel("Old Faithful Geyser Data"),
# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
textInput("textin", label = "text input")
, actionButton("makepdf", "Make pdf")
),
mainPanel(
htmlOutput("pdfviewer")
)
)
))
server.R
library(shiny)
shinyServer(function(input, output) {
observeEvent(input$makepdf,{
title <- input$textin
print(title)
pdf("www/test.pdf")
plot(mtcars$mpg,mtcars$disp, main = title)
dev.off()
})
observeEvent(input$makepdf,({
output$pdfviewer <-renderText({
return(paste('<iframe style="height:600px; width:100%" src="'," test.pdf", '"></iframe>', sep = ""))
})
})
)
})
重新购买的步骤:
答案 0 :(得分:1)
我不知道为什么这样做而不是我的问题中的脚本,但是根据this answer使用renderUI和标签$ iframe解决了这个问题。我欢迎任何解释,为什么一个工作,而不是另一个。
将server.ui更改为以下内容:
library(shiny)
shinyServer(function(input, output) {
observeEvent(input$makepdf,{
title <- input$textin
print(title)
pdf("www/test.pdf")
plot(mtcars$mpg,mtcars$disp, main = title)
dev.off()
})
output$pdfviewer<- renderUI({
if((input$makepdf)<1) return()
test <- " test.pdf"
my_test <- tags$iframe(src=test, height=600, width = "100%")#, width=535
print(my_test)
return({my_test})
})
})