Convert html output to image

て烟熏妆下的殇ゞ 提交于 2019-12-24 10:54:02

问题


I'm using R formattable package to render some data frames but the output is html ( it opens the browser after I run the script ).

The thing is I'm trying to render those tables under PowerBI which accepts R scripts but need the output to be an image (like a ggplot) not html. But I don't know how I can do it.

I've looked into R2HTML and htmlwidgets packages but I still didn't find a solution with those. ( I may have made some mistakes ).

Here is the dummy code I'm working with:

library(formattable)
DF <- data.frame(Ticker=c("", "", "", "IBM", "AAPL", "MSFT"),
             Name=c("Dow Jones", "S&P 500", "Technology", 
                    "IBM", "Apple", "Microsoft"),
             Value=accounting(c(15988.08, 1880.33, NA, 
                                130.00, 97.05, 50.99)),
             Change=percent(c(-0.0239, -0.0216, 0.021, 
                              -0.0219, -0.0248, -0.0399)))
DF
##   Ticker       Name     Value Change
## 1         Dow Jones 15,988.08 -2.39%
## 2           S&P 500  1,880.33 -2.16%
## 3        Technology        NA  2.10%
## 4    IBM        IBM    130.00 -2.19%
## 5   AAPL      Apple     97.05 -2.48%
## 6   MSFT  Microsoft     50.99 -3.99%
formattable(DF, list(
  Name=formatter(
"span",
style = x ~ ifelse(x == "Technology", 
                   style(font.weight = "bold"), NA)),
  Value = color_tile("white", "orange")
 Change = formatter(
"span",
style = x ~ style(color = ifelse(x < 0 , "red", "green")),
x ~ icontext(ifelse(x < 0, "arrow-down", "arrow-up"), x))))

回答1:


formattable(DF, list(
  Name = formatter(
    "span", style = x ~ ifelse(x == "Technology",  style(font.weight = "bold"), NA)
  ),
  Value = color_tile("white", "orange"),
  Change = formatter(
    "span", style = x ~ style(color = ifelse(x < 0 , "red", "green")),
    x ~ icontext(ifelse(x < 0, "arrow-down", "arrow-up"), x)))
) -> w

htmlwidgets::saveWidget(as.htmlwidget(w), "/some/dir/table.html", selfcontained = TRUE)

webshot::webshot(url = "/some/dir/table.html", file = "/some/dir/table.png", 
                 vwidth = 1000, vheight = 275)

The width/height is not necessarily going to come out precisely as what's specified and you'll need to do some manual guessing for it (or load up magick and see if you can auto-clip using it).

This relies on phantomjs and you may not be able to get your IT and/or security groups to enable the use of it.



来源:https://stackoverflow.com/questions/45298144/convert-html-output-to-image

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!