首页 > 解决方案 > 如何以表格格式显示“pdfsearch”输出,其中包含可见的文本列、页码、行号?

问题描述

我用 Shiny 创建了一个简单的pdfsearch搜索选项。但是,我希望输出采用表格形式,以便于阅读。我尝试使用数据表包,但似乎没有得到我需要的正确格式。

library(pdfsearch)
library(shiny)
library(DT)


file <- system.file('pdf', 'rhyme.pdf', package = 'pdfsearch')

word_sentence <-function(word) {keyword_search(file,    
                                               keyword = word,
                                               path = TRUE)}



retobj <- function(word) {
  x <- word_sentence(word)
  page <- x$page_num
  line <- x$line_num
  text <- x$line_text
  return(paste0(text," "," *Page no-",page," *line-",line))
}


ui<- shinyUI(fluidPage(dashboardBody(
  img(src='image.jpg', align = "left"),style = "padding-top:20px",
  

  br(),
  br(),
  br(),
  br(),
  
  fluidRow(
    column(width = 2,
           h5(HTML("<strong>Enter a word.Click \"SEARCH\" </strong>")),
           wellPanel(
             textInput("inputString","Enter a word here",value=" "),
             submitButton("SEARCH"),
             
           )),
    
    column(width= 7,style = "max-height: 90vh; overflow-y: auto;",
           h4("Search Results"), 
           wellPanel(            
             tags$style("#mytext { white-space: pre-line; }"),
             textOutput("mytext")
           ))
         )
       )
     ) 
    ) 


server <- function(input, output, session) {
  output$mytext <- renderPrint({
    sentences <- retobj(input$inputString)
    length(sentences)
    cat(paste0(1:length(sentences)," - ",sentences,sep= '\n'))
  })
}


shinyApp(ui,server)

当我搜索“hill”这个词时,我现在得到了输出。作为 :

1.jack went to the hill blah blah *Page no- 12 * line no -34
2.jack went rolling on hill blah  *Page no 17 *line no - 56
3.jill climbed the hill blah blah * Page no 34  * line no -89
''''
20......

我希望输出以表格格式显示在 Shiny 中,例如:

              Text                          Page no       Line No 

  jack went to the hill blah                   12            34

  jack went rolling on hill blah               17            56
 
  jill climbed the hill   blah                 34            89
 
  '    ''''''''''          

使用ShinyrenderDataTableserver部分和tableOutputinui在 R 控制台而不是 Shiny 中为我提供了输出,我尝试 retob <- function({.....tableHTML(text,page,line)}了但它给了我错误,因为不是矩阵格式。有没有更简洁的方法来以上述方式格式化内容?

标签: rshiny

解决方案


您的retobj函数实际上是问题所在,因为它只创建一个字符串作为返回值。但是,keyword_search已经返回了一个 tibble,因此您可以直接使用此输出并将dplyr其转换为所需的格式并最终DT显示它:

library(pdfsearch)
library(shiny)
library(shinydashboard)
library(DT)
library(dplyr)


file <- system.file('pdf', '1501.00450.pdf', package = 'pdfsearch')

word_sentence <-function(word) {keyword_search(file,    
                                               keyword = word,
                                               path = TRUE)}



ui<- shinyUI(fluidPage(dashboardBody(
  
  
  br(),
  br(),
  br(),
  br(),
  
  fluidRow(
    column(width = 2,
           h5(HTML("<strong>Enter a word.Click \"SEARCH\" </strong>")),
           wellPanel(
             textInput("inputString","Enter a word here",value=" "),
             submitButton("SEARCH"),
             
           )),
    
    column(width= 7,style = "max-height: 90vh; overflow-y: auto;",
           h4("Search Results"), 
           wellPanel(            
             tags$style("#mytext { white-space: pre-line; }"),
             DTOutput("mytext")
           ))
  )
)
) 
) 


server <- function(input, output, session) {
  
  output$mytext <- renderDT({
    results <- word_sentence(input$inputString)
    results <- results %>% 
      select(line_text, page_num, line_num) %>% 
      rename(Text = line_text,
             `Page no` = page_num,
             `Line no` = line_num)
    datatable(results)
  })
}


shinyApp(ui,server)


推荐阅读