要在 Shiny ui 中嵌入 PDF 查看器(Web 浏览器的默认 PDF 查看器,例如 mozilla 上的 pdf.js),您可以使用 iframe,其中 src 将是 PDF 的路径。
以下是在界面中包含 iframe 的两种不同方法:
在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 代码:
Ui :
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 应用程序的情况)加载页面时,您无法使用“file:”URL 来构建本地文件。如果你想显示当地人的pdf,你应该使用http(s):
URL,因此您必须将它们保存在您的 www 目录(本地 Web 服务器)中并使用其访问文件http(s):
URL(URL 类似于http://localhost/.../mypdf.pdf
)如我示例中的第二个 iframe 所示。 (那么你不能直接使用fileInput,你必须格式化它)
Ui.R :
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 查看器的网页:
希望这有帮助。