如何使用shinyjs从闪亮的应用程序物理打印png?
Posted
技术标签:
【中文标题】如何使用shinyjs从闪亮的应用程序物理打印png?【英文标题】:How to physically print a png from a shiny app with shinyjs? 【发布时间】:2019-12-05 06:53:04 【问题描述】:我正在尝试从闪亮的应用程序中物理打印图像,我已经阅读过: RShiny print current page
但是,它会打印所有窗口内容,我喜欢将图形发送到打印机。
我希望使用闪亮的 JS 工具可以打印闪亮的图像。
我该如何解决这个问题?
【问题讨论】:
作为一种解决方法,您可以使用下载处理程序,用户不会单击“保存”而是“打开”png,然后他们可以从标准图像查看器打印它。比直接打印多点击两下。 我想知道,您是要打印嵌入到闪亮应用程序中的常规图像,还是要打印在服务器上渲染并显示在 UI 中的图? 【参考方案1】:有趣的问题。假设我们要打印一张普通的图像,嵌入在带有tags$img
的闪亮应用程序中。我尝试分两步接近它。
-
我们如何通过在 javascript 中单击按钮来打印图像。
我们如何才能将这种方法带入闪亮。
第一个问题在 SO here 上得到回答。 我选择尝试投票最多的答案。
使用 shinyjs,我们可以将 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
如果要打印在服务器上呈现的图形,则可能需要首先创建图形的临时图像文件,然后应用上述方法。
【讨论】:
以上是关于如何使用shinyjs从闪亮的应用程序物理打印png?的主要内容,如果未能解决你的问题,请参考以下文章