Jump to page of embedded PDF

I want to jump to a certain page of an embedded PDF in shiny. I use tags$iframe to display the PDF. I know that I have to expand the URL in tags$iframe to jump to a certain page of the PDF by adding #page=x, i.e. tags$iframe(style="height:785px; width:100%", src="http://www.pdf995.com/samples/pdf.pdf#page=3").

However, if I have multiple tabs and switch from tab 1 to tab 2 and back to tab 1, the PDF always shows page 1. I could reload the whole tab/PDF to jump back to page 3, but I don't want to do that!

I tried to use JavaScript but it doesn't work because document.getElementById doesn't work properly.

My code so far

library(shiny)
library(shinyjs)


ui <- tagList(
  useShinyjs(),
  tags$script('Shiny.addCustomMessageHandler("go_to_page", function(message) {
  document.getElementById("show_pdf").contentWindow.PDFViewerApplication.page = 3;
              });'),
  fluidPage(
    fluidRow(
      column(6,
             tabsetPanel(id = "tabs",
               tabPanel(
               "Tab 1",
               uiOutput("show_pdf")
             ),
             tabPanel(
               "Tab 2",
               uiOutput("show_pdf1"))
             )
      )
    ))
)

server <- function(input, output, session){
  output$show_pdf <- renderUI({
    tags$iframe(style="height:785px; width:100%", src="http://www.pdf995.com/samples/pdf.pdf#page=3")
  })
  
  output$show_pdf1 <- renderUI({
    tags$iframe(style="height:785px; width:100%", src="http://www.pdf995.com/samples/pdf.pdf#page=4")
  })
  
  observe({
    input$tabs
    session$sendCustomMessage(type = 'go_to_page', message = runif(1))
  })
}

shinyApp(ui = ui, server = server)

What do I have to change so that the code works properly?

This topic was automatically closed 54 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.