我还是新手,并且有光泽,而且我很难接受本来应该是简单的逻辑。我试图在imageOutput小部件中显示pdf文件,但没有运气。有人能引导我朝着正确的方向前进吗?
示例ui.R
shinyUI(pageWithSidebar(
mainPanel(
selectInput("sel_ed",
label = "View outputs for Ecodistrict:",
choices = c(244,245,247,249),
selected = NULL,
multiple = FALSE),
imageOutput("imp_pdf",width="500px",height="500px")
))
示例server.R
shinyServer(function(input, output, session) {
importance <- function(inputSpecies){
img_dir <- pdf(paste(inputSpecies,"\\models\\MATL\\MATRF_Importance",sep=""))
}
output$imp_pdf <- renderImage({importance(input$sel_ed)})
})
我得到的大多数错误都与预期的字符向量参数或原子向量有关。我知道闪亮或多或少的设计用于渲染和显示图像或绘图,但必须有一种方法来显示已经在本地驱动器上的pdf ..
答案 0 :(得分:19)
要在您的Shiny ui中嵌入PDF查看器(Web浏览器的默认PDF查看器,例如mozilla上的pdf.js),您可以使用iframe,src将成为PDF的路径。
以下是在界面中包含iframe的两种不同方法:
<\ n>在Ui中,您可以直接添加带有绝对src属性的iframe
标记,如下所示:
tags$iframe(style="height:600px; width:100%", src="http://localhost/ressources/pdf/R-Intro.pdf"))
或者从服务器中的ui获取URL,使用输入URL编写iframe
标记,并在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应用程序的情况)时,您无法使用其“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"))
)
)
)
))
Server.R:
shinyServer(function(input, output, session) {
output$pdfviewer <- renderText({
return(paste('<iframe style="height:600px; width:100%" src="', input$pdfurl, '"></iframe>', sep = ""))
})
})
包含PDF查看器的网页:
希望得到这个帮助。
答案 1 :(得分:0)
在原始目录中创建一个名为www的文件夹,其中包含server.R和ui.R脚本。将PDF放在www /文件夹中,然后使用类似下面的代码:
在server.R中:
shinyServer(function(input, output) {
observeEvent(input$generate, {
output$pdfview <- renderUI({
tags$iframe(style="height:600px; width:100%", src="foo.pdf")
})
})
})
在ui.R:
shinyUI(fluidPage(
titlePanel("Display a PDF"),
sidebarLayout(
sidebarPanel(
actionButton("generate", "Generate PDF")
),
mainPanel(
uiOutput("pdfview")
)
)
))
答案 2 :(得分:0)
Fabian N.的回答的补充。
有两件重要的事情: