有趣的问题。假设我们要打印一张普通的图像,嵌入在带有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
如果要打印在服务器上呈现的图形,则可能需要首先创建图形的临时图像文件,然后应用上述方法。