如何使用 shinyjs 从闪亮的应用程序中物理打印 png?

How to physically print a png from a shiny app with shinyjs?

我正在尝试从闪亮的应用程序中打印图像,我已经阅读过:

但是,它会打印所有 window 内容,我喜欢将图表发送到打印机。

我希望使用闪亮的 JS 工具可以打印闪亮的图像。

我该如何解决这个问题?

有趣的问题。假设我们想要打印一张普通图像,嵌入到带有 tags$img 的闪亮应用程序中。我试着分两步来处理它。

  1. 我们如何通过在 javascript 中单击按钮来打印图像。
  2. 我们如何才能使这种方法闪亮。

SO here 回答了第一个问题。 我选择点赞最多的答案试试

借助 shinyjs,我们可以为 shiny 带来 javascript 功能。

useShinyjs(),  # Set up shinyjs
shinyjs::extendShinyjs(text = paste0("shinyjs.img_print = function(){",
                                     "popup = window.open();",
                                     "popup.document.write('",tags$img(src = img_url),"');",
                                     "popup.focus();",
                                     "popup.print(); }"))

借助 observeEvent,我们可以通过单击操作按钮来触发操作。

observeEvent(input$print, {
  shinyjs::js$img_print()
})

将所有内容放在一个简单闪亮的应用程序中:

library("shiny")
library("shinyjs")
library("V8")

img_url <-"https://images.unsplash.com/photo-1563169372-eb64c121f9dc?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1561&q=80"

shinyApp(

  ui = fluidPage(

    useShinyjs(),  # Set up shinyjs
    shinyjs::extendShinyjs(text = paste0("shinyjs.img_print = function(){",
                                         "popup = window.open();",
                                         "popup.document.write('",tags$img(src = img_url),"');",
                                         "popup.focus();",
                                         "popup.print(); }")),
    tags$img(src = img_url, 
             alt = "Image 1",
             height = 400,
             width = 300),
    actionButton("print", "Print image")


  ), # closes fluidPage


  # Server ------
  server = function(input, output, session){

    observeEvent(input$print, {
      shinyjs::js$img_print()
    })


  } # Closes server
) # Closes ShinyApp

如果要打印在服务器上呈现的图形,则可能需要先创建绘图的临时图像文件,然后应用上述方法。