要在 Shiny ui 中嵌入 PDF 查看器(Web 浏览器的默认 PDF 查看器,例如 mozilla 上的 pdf.js),您可以使用 iframe,其中 src 将作为 PDF 的路径。
这是在界面中包含 iframe 的 2 种不同方法:
在 Ui 中,您可以直接添加iframe
具有绝对 src 属性的标签,如下所示:
tags$iframe(style="height:600px; width:100%", src="http://localhost/ressources/pdf/R-Intro.pdf"))
或者从服务器的 ui 中获取 URL,iframe
使用输入 URL 编写标签,并在 ui 中的 htmlOutput 中返回 HTML 代码:
界面:
textInput("pdfurl", "PDF URL")
htmlOutput('pdfviewer')
服务器 :
output$pdfviewer <- renderText({
return(paste('<iframe style="height:600px; width:100%" src="', input$pdfurl, '"></iframe>', sep = ""))
})
请注意,出于安全原因,当使用 HTTP(S) 协议(Shiny 应用程序的情况)加载页面时,您不能使用它们的“文件:”URL 框住本地文件。如果您想显示本地 pdf,您应该使用http(s):
URL 访问它们,因此您必须将它们保存在 www 目录(本地 Web 服务器)中并使用它们的 URL 访问文件http(s):
(URL 类似于http://localhost/.../mypdf.pdf
),如我的示例的第二个 iframe。(那你不能直接使用fileInput,必须格式化)
用户界面:
library(shiny)
row <- function(...) {
tags$div(class="row", ...)
}
col <- function(width, ...) {
tags$div(class=paste0("span", width), ...)
}
shinyUI(bootstrapPage(
headerPanel("PDF VIEWER"),
mainPanel(
tags$div(
class = "container",
row(
col(3, textInput("pdfurl", "PDF URL"))
),
row(
col(6, htmlOutput('pdfviewer')),
col(6, tags$iframe(style="height:600px; width:100%", src="http://localhost/ressources/pdf/R-Intro.pdf"))
)
)
)
))
服务器.R:
shinyServer(function(input, output, session) {
output$pdfviewer <- renderText({
return(paste('<iframe style="height:600px; width:100%" src="', input$pdfurl, '"></iframe>', sep = ""))
})
})
带有 PDF 查看器的网页:
希望这有帮助。