You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shiny应用内嵌展示PDF并实现无需用户输入.pdf后缀的功能

解决方案

核心修改点

  • 针对内嵌PDF触发外部程序的问题:改用embed标签强制调用浏览器内置PDF渲染器,同时确保所有PDF文件存放在shiny应用根目录的www文件夹下,这是shiny默认的静态资源托管目录,只有放在该目录下的文件可被前端直接访问。
  • 针对自动补全.pdf后缀的问题:服务端对用户输入做标准化处理,先自动移除用户可能误输入的.pdf后缀,再统一拼接后缀,同时增加文件存在校验,匹配不到文件时给用户明确提示。

完整可运行代码

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(title = "PDF阅读器"),
  dashboardSidebar(disable = TRUE), # 隐藏不需要的侧边栏
  dashboardBody(
    textInput(
      inputId = "select_pdf", 
      label = "PDF文件查询", 
      placeholder = "请输入PDF文件名(无需输入.pdf后缀)"
    ),
    uiOutput("pdf_viewer")
  )
)

server <- function(input, output) {
  output$pdf_viewer <- renderUI({
    input_name <- trimws(input$select_pdf)
    # 输入为空时返回提示
    if (nchar(input_name) == 0) {
      return(tags$p("请输入要查询的PDF文件名"))
    }
    # 移除用户可能输入的.pdf后缀(不区分大小写),再统一拼接
    file_name <- paste0(sub("\\.pdf$", "", input_name, ignore.case = TRUE), ".pdf")
    # 校验www目录下是否存在对应文件
    if (!file.exists(file.path("www", file_name))) {
      return(tags$p("*未找到对应PDF文件,请检查文件名是否正确*"))
    }
    # 用embed标签内嵌PDF,避免触发外部程序
    tags$embed(
      style = "height: 600px; width: 100%",
      src = file_name,
      type = "application/pdf"
    )
  })
}

shinyApp(ui, server)

使用说明

  • 所有需要展示的PDF文件请统一放在shiny应用代码同目录的www文件夹下(如果没有该文件夹请手动新建)
  • 输入文件名时不需要加.pdf后缀,即使误加了后缀程序也会自动处理

内容的提问来源于stack exchange,提问作者user16188393

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 16:27:03