如何显示多个 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。
下面的代码可以显示 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。