如何在闪亮的应用程序中创建打印按钮,以打印用户在文本框中输入的文本的纸质副本?

时间:2019-06-14 21:56:12

标签: r shiny markdown

我正在尝试创建一个闪亮的应用程序,以帮助我的同事对大量定性数据进行排序,突出显示,组织等。基本上,我希望它显示一些叙述性文本,允许使用它来复制/粘贴文本或在文本区域中做笔记,然后将这些笔记打印到物理打印机上。我设法创建了一个最小的应用程序,允许用户在文本字段中输入文本,但是我不知道如何将内容发送到物理打印机

据我所知...

library(shiny)
library(noteMD)

ui <- fluidPage(

  sidebarLayout(
  sidebarPanel(),

  mainPanel(
     tags$textarea("", id='input_notes', rows =20, style = 'width:100%;'),
     actionButton('input_notes', 'Print Notes'))))

server <- function(input, output) {
output$print_notes <- reactive({input$input_notes}) #????????????????
}

shinyApp(ui = ui, server = server)

我遇到了noteMD软件包,它似乎很有前途,在这里:https://www.rdocumentation.org/packages/noteMD/versions/0.1.0 我似乎无法使它正常工作。

最终,我想为用户提供一种干净的方法,使用户只需单击一下即可打印自己的笔记。

1 个答案:

答案 0 :(得分:1)

这是一个jQuery print库的简单解决方案:

library(shiny)

ui <- fluidPage(
  tags$head(
    tags$script(src = "https://cdnjs.cloudflare.com/ajax/libs/jQuery.print/1.6.0/jQuery.print.min.js")
  ),
  textAreaInput("textarea", "Type some text to be printed"), 
  actionButton("print", "Print", onclick = "$('#textarea').print();")
)

server <- function(input, output){}

shinyApp(ui, server)

但是,这也会打印文本区域的框架。以下解决方案仅打印文本:

library(shiny)

js <- paste(
  "function print(){",
  "  var content = $('#textarea').val();",
  "  content = content.replace(/([^>\\r\\n]?)(\\r\\n|\\n\\r|\\r|\\n)/g, '$1' + '</br>' + '$2')",
  "  var $p = $('<p></p>');",
  "  $p.html(content);",
  "  $p.print();",
  "}", 
  sep = "\n"
)

ui <- fluidPage(
  tags$head(
    tags$script(HTML(js)),
    tags$script(src = "https://cdnjs.cloudflare.com/ajax/libs/jQuery.print/1.6.0/jQuery.print.min.js")
  ),
  textAreaInput("textarea", "Type some text to be printed"), 
  actionButton("print", "Print", onclick = "print();")
)

server <- function(input, output){}

shinyApp(ui, server)