Как я могу создать кнопку печати в блестящем приложении, чтобы распечатать текстовую копию, которую пользователи вводят в текстовое поле? - PullRequest
1 голос
/ 15 июня 2019

Я пытаюсь создать блестящее приложение, которое поможет моим коллегам сортировать, выделять, организовывать и т. Д. Множество качественных данных. По сути, я хочу, чтобы он отображал некоторый повествовательный текст, позволял пользователям копировать / вставлять текст или делать заметки в текстовой области, а затем распечатывать эти заметки на физическом принтере. Мне удалось создать минимальное приложение, которое позволяет пользователям вводить текст в текстовое поле, но я не могу понять, как отправить содержимое на физический принтер

Это насколько я могу получить ...

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 Ответ

1 голос
/ 15 июня 2019

Вот простое решение с библиотекой 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)
...