如何显示多个 PDF

How to display multiple PDFs

下面的代码可以显示 1 个 pdf 文档,这个应用程序可以接受多个 pdf 的上传,但是我如何在 1 个查看器中显示多个 pdf(如果每个 pdf 有 1 页,并且我已经上传了 3 个文档,我希望在该查看器中看到 3 页)?是否有可能或者我是否需要查看动态 UI 以在不同的查看器中显示它们?

如果以下代码不适合您,请确保您有一个 www 文件夹用于保存 app.R 并重新启动 RStudio。

编辑:

感谢 heds1 的回答,它可以在不同的查看器中查看 pdf,但是不确定是否有人知道如何在 1 个查看器而不是多个查看器中查看它们? post 会再开几天,看看是否可行。

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 文件夹中,然后在 RStudio 中点击 Run App 而不是直接 运行 代码,否则它将无法正确获取 PDF。