2

我正在尝试部署一个 Shiny 应用程序,该应用程序允许用户上传 pdf 文档并从所选页面中提取表格。为此,我正在使用 package tabulizer。一个基本的可重现示例:

library(shiny)
library(tabulizer)

ui <- fluidPage(
  fileInput("report", NULL,buttonLabel = "Upload report"),
  numericInput("page","Specify page number",value = 1),
  actionButton("extract","Extract"),
  verbatimTextOutput("data")
)

server <- function(input, output, session) {
  generate_data <- reactive({
    req(input$report)
    # This locate_area function calls runApp() from the tabulizer package
    area <- locate_areas(file = input$report$datapath,
                         pages = input$page, 
                         widget = "reduced")  
    table <- extract_tables(file = input$report$datapath,
                            pages = input$page,
                            area = area)
    return(table)
  })%>% bindCache(input$page) %>% bindEvent(input$extract)
  
  output$data <- renderPrint({
    # Just for the sake of this example to show it works
    generate_data()
  })
}

shinyApp(ui = ui, server = server)

如果我在本地运行它,locate_area()它将在我的 RStudio 中的查看器上弹出 pdf 页面,一切都很好。但是,如果我发布应用程序,单击操作按钮后它不会运行。我知道问题来自于,因为它本质上在闪亮的应用程序中locate_area()调用了另一个。runApp我尝试使用不同的小部件locate_area()无济于事。有人知道绕过这个问题的方法吗?

4

1 回答 1

2

从相关问题(第 15期和第 53 期)来看,您最好的方法似乎是将原始tabulizer功能中的功能复制到您自己的应用程序中,因为目前该包不提供与其他 Shiny 应用程序的轻松集成。

于 2021-07-31T19:54:37.123 回答