Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue with gtsave() and Chrome on shinyapps.io #1929

Open
Fredysessie opened this issue Nov 29, 2024 · 2 comments
Open

Issue with gtsave() and Chrome on shinyapps.io #1929

Fredysessie opened this issue Nov 29, 2024 · 2 comments
Assignees

Comments

@Fredysessie
Copy link

Fredysessie commented Nov 29, 2024

Hello,

For the past two days, I've been encountering an issue with the gtsave() function when trying to save a table as a PNG file. The error message indicates that it cannot find an available port to start Chrome "Cannot find an available port. Please try again.".

Locally, gtsave() works perfectly in my Shiny app. However, after deploying the app to shinyapps.io, the error occurs, and the download is blocked by Chrome. I’ve searched online but haven’t been able to find a solution.

I’m using chromote version 0.3.1.

Does anyone know how I can fix this?

Thank you in advance for your help.

Best regards,

Below is my session info

devtools::session_info("chromote")
─ Session info ──────────────────────────────────────────────────────────────────
setting value
version R version 4.2.2 (2022-10-31 ucrt)
os Windows 10 x64 (build 22631)
system x86_64, mingw32
ui RStudio
language (EN)
collate French_France.utf8
ctype French_France.utf8
tz Europe/Paris
date 2024-11-29
rstudio 2024.09.1+394 Cranberry Hibiscus (desktop)
pandoc 3.2 @ C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools/ (via rmarkdown)

─ Packages ──────────────────────────────────────────────────────────────────────
! package * version date (UTC) lib source
AsioHeaders 1.22.1-2 2022-12-08 [1] RSPM
P chromote * 0.3.1 2024-08-30 [?] RSPM
cpp11 0.5.0 2024-08-27 [1] RSPM
P curl 6.0.1 2024-11-14 [?] RSPM
P fastmap 1.2.0 2024-05-15 [?] RSPM
P jsonlite 1.8.9 2024-09-20 [?] RSPM
P later 1.3.0 2021-08-18 [?] CRAN (R 4.2.2)
P magrittr * 2.0.3 2022-03-30 [?] CRAN (R 4.2.2)
P processx 3.8.4 2024-03-16 [?] RSPM
P promises 1.2.0.1 2021-02-11 [?] CRAN (R 4.2.2)
P ps 1.8.1 2024-10-28 [?] RSPM
P R6 2.5.1 2021-08-19 [?] CRAN (R 4.2.2)
P Rcpp 1.0.13 2024-07-17 [?] RSPM
P rlang 1.1.4 2024-06-04 [?] RSPM
P websocket 1.4.2 2024-07-22 [?] RSPM

P ── Loaded and on-disk path mismatch.

Minimal example

library(gt)
library(webshot2)

# Sample data creation
df <- data.frame(
  Product = c("Product A", "Product B", "Product C"),
  Price = c(100, 200, 300),
  Quantity = c(5, 3, 8),
  Total = c(500, 600, 2400)
)

ui <- page_fluid(
  title = "GT Screenshot",
  
  card(
    card_header("Table and Capture Button"),
    
    gt_output("table"),
    
    downloadButton("capture", "Capture and Download", 
                   class = "btn-primary mt-3")
  )
)

server <- function(input, output, session) {
  
  # GT table creation and display
  output$table <- render_gt({
    gt(df) %>%
      tab_header(
        title = "My Table"
      ) %>%
      fmt_number(
        columns = c(Price, Total),
        decimals = 2
      ) %>%
      tab_style(
        style = cell_text(weight = "bold"),
        locations = cells_column_labels()
      )
  })
  
  # Download handler
  output$capture <- downloadHandler(
    filename = function() {
      paste0("table_capture_", format(Sys.time(), "%Y%m%d_%H%M%S"), ".png")
    },
    content = function(file) {
      gt_table <- gt(df) %>%
        tab_header(
          title = "My Table"
        ) %>%
        fmt_number(
          columns = c(Price, Total),
          decimals = 2
        ) %>%
        tab_style(
          style = cell_text(weight = "bold"),
          locations = cells_column_labels()
        )
      
      gtsave(
        gt_table,
        filename = file,
        expand = 15,
        vwidth = 3000,
        vheight = 2000,
        zoom = 3
      )
    }
  )
}

shinyApp(ui = ui, server = server)
@olivroy
Copy link
Collaborator

olivroy commented Nov 29, 2024

If I understand correctly, I don't think it will be possible. rstudio/webshot2#6

@Fredysessie
Copy link
Author

@rich-iannone are there any alternative methods.
I would like to remind that the final objective is to put these PNGs in the power point slides. Since there will be several PNGs I automated the process. The gtsave( ) pngs look better than those obtained using flextable's save_as_image( ) function.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants