下面的代码可以显示 1 个 pdf 文档,这个应用程序可以接受多次上传的 pdf,但是如何在 1 个查看器中显示多个 pdf(如果每个 pdf 有 1 页,并且我已经上传了 3 个文档,我希望看到 3该查看器中的页面)?是否有可能或者我需要查看动态 UI 以在不同的查看器中显示它们?
如果以下代码对您不起作用,请确保您有一个www
文件夹来保存app.R
并重新启动 RStudio。
感谢 heds1 的回答,它可以在不同的查看器中查看 pdf,但是不确定是否有人知道如何在 1 个查看器而不是多个查看器中查看它们?将保持帖子开放几天,看看它是否可能。
library(shiny)
ui <- shinyUI(fluidPage(
titlePanel("Testing File upload"),
sidebarLayout(
sidebarPanel(
fileInput('file_input', 'upload file ( . pdf format only)', accept = c('.pdf'),multiple = T)
),
mainPanel(
uiOutput("pdfview")
)
)
))
server <- shinyServer(function(input, output) {
observe({
req(input$file_input)
file.copy(input$file_input$datapath,"www", overwrite = T)
output$pdfview <- renderUI({
tags$iframe(style="height:600px; width:100%", src="0.pdf")
})
})
})
shinyApp(ui = ui, server = server)
如果您不确定是否总是要查看三个文件,那么最好使用动态 UI。这是一个示例(我忽略了文件上传方面,专注于动态 UI 部分):
library(shiny)
ui <- fluidPage(uiOutput("pdfview_ui"))
server <- shinyServer(function(input, output) {
# get pdf files in directory
files <- list.files(path = "www")
# loop over files to create iframes
lapply(files, function(file) {
output[[file]] <- renderUI({
tags$iframe(style= "height:600px; width:100%", src = file)
})
})
# loop over files to render the iframes
output$pdfview_ui <- renderUI({
lapply(files, function(file) {
uiOutput(file)
})
})
})
shinyApp(ui = ui, server = server)
将您的 PDF 文件放在www
文件夹中,然后Run App
在 RStudio 中点击而不是直接运行代码,否则它将无法正确获取 PDF。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句