title: Export R Shiny Page to PDF
body: <p>I have a large Shiny application that has a number of prompts, then generates tables and plot based on those inputs. I don't use rmarkdown or knitr or anything to format the output. I just use the standard Shiny elements (sidebarPanel, mainPanel, etc.). For the plots and tables I use the standard reactive renderPlot and renderTable objects.
  I'm looking for an easy way to have a button called "Export to PDF" that exports the elements on the page to a PDF document.</p>
  
  <p>I've looked into using knitr and rmarkdown to generate a document with some fancy formatting (see <a href="http://shiny.rstudio.com/articles/generating-reports.html" rel="noreferrer">here</a> and <a href="http://shiny.rstudio.com/gallery/download-knitr-reports.html" rel="noreferrer">here</a> for examples). 
  The problem is that it appears that I'll need to regenerate the tables and plots either within the Rmd file or the server.R within a downloadHandler object, and I'd like to avoid that.</p>
  
  <p>Is there any way to output the page as a pdf more easily. More specifically, is there any way to directly reference the output tables and plots (i.e. the output$ objects) from within the Rmd file so that plots and tables don't need to be generated twice.</p>
  
  <p>Edit: Here is some simplified code. Note getDataset() is a reactive function that queries a database based on the inputs.
  My goal is to simply add an "Export" button that exports the already-generated plots and table. (Also as a side note, is there any way I can get a reactive dataset that is shared among all reactive elements? i.e. not need to have ds &lt;- getDataset() in every object?)</p>
  
  <p>Server</p>
  
  <pre><code>output$hist &lt;- renderPlot({
    ds &lt;- getDataset()
    # do data transformations
  
    ggplot(ds, aes(val)) +
      geom_histogram(binwidth = binSize, aes(fill = ..count..)) +
      labs(title = "val dist", x = "val", y = "Count") + 
      scale_fill_gradient("Count", low = "green", high = "red", guide = FALSE) +
      scale_x_continuous(limits = c(min(ds$val), quantile(ds$val, 0.99))) +
      geom_hline(yintercept=maxY, linetype=3)
  })
  
  output$time &lt;- renderPlot({
    ds &lt;- getDataset()
    # do data transformations
    ggplot(ds, aes(as.POSIXlt(unixTime, origin="1970-01-01", tz="UTC"), val), colour = val) +
      scale_y_continuous(limits = c(min(ds$val), quantile(ds$val, 0.99))) +
      labs(title = "Val Over Time", x = "Time (UTC)", y = "val (ms)") +
      geom_point(alpha = 0.3, size = 0.7) +
      geom_smooth()
  })
  output$stats &lt;- renderTable({
    statsDf = getDataset()
    # do data transformations
    statsDf
  })
  </code></pre>
  
  <p>UI</p>
  
  <pre><code>ui &lt;- fluidPage(
    titlePanel("Results"),
  
    sidebarLayout(
      sidebarPanel(
        dateInput("startDateTime", "Start Date:", value = "2016-10-21"),
        textInput("startTime", "Start Time", "00:00:00"),
        br(),
        dateInput("endDateTime", "End Date:", value = "2016-10-21"),
        textInput("endTime", "End Time", value = "02:00:00"),
        br(),
        submitButton("Submit")
      ),
      mainPanel(
        tabsetPanel(type = "tabs",
                    tabPanel("Plots",
                             plotOutput("hist"),
                             plotOutput("time"),
                    tabPanel("Statistics", tableOutput("stats"))
        )
      )
    )
  )
  </code></pre>