在闪亮的应用程序中显示PDF文件并不适用于所有操作系统和浏览器

时间:2018-02-22 09:30:13

标签: r windows pdf browser shiny

我开发了一个闪亮的应用程序,基本上只显示pdf文件。这在Safari浏览器中就像我的Mac上的魅力,但不是在OSX Firefox中。 在Windows上,它似乎根本不适用于IE(或Edge)或Firefox。 一位同事在Linux上对它进行了测试,它可以在Firefox和Chrome中运行。

这是指向闪亮应用https://butterlab.imb-mainz.de/EvoAnnotate/

的链接

有没有人建议我能做什么?例如,我希望显示与PNG相比的PDF,因为PNG的文件大小要大得多,而且分辨率总是有限的。

作为一个可重复的例子,这里有一些代码。它希望在工作目录中有一个名为test.pdf的文件。

ui <- shiny::fluidPage(
  imageOutput("myImage")
)
server <- function(input, output, session) {
  output$myImage <- renderImage({
    list(src = 'test.pdf',
         contentType = 'application/pdf',
         width = 960,
         height = 680,
         alt = 'test.pdf')
  },
  deleteFile=FALSE)
}
shinyApp(ui = ui, server = server)

修改

我现在为所有PDF文件创建了一个png版本,并在没有显示PDF的情况下为用户提供了一个开关。不是最好的解决方案,但也许有人可以建议更具互动性的东西?也许使用javascript来检查文件是否显示?

1 个答案:

答案 0 :(得分:1)

它不起作用,因为PDF本身并不是严格意义上的图像,而renderImage会尝试在网页上的<img>标记内显示该对象。我的想法是,显示PDF的浏览器是异常的,而不是标准的。更广泛地搜索如何在网页上显示PDF显示一种方法是使用<iframe>。 (see here

因此,实现此目标的一种方法是在<img>标记与<iframe>

之间切换
output$myImage <- renderUI({
  if (input$toggle == "PDF") {
    tags$iframe(style = 'height: 680px; width: 960px;',
                src = 'test.pdf')
  } else if (input$toggle == "PNG") {
    tags$img(style = 'height: 680px; width: 960px;',
             src = 'test.pdf')
  }
})