R语言 如何使用`webshot`和`phantomjs`在md/github文档中包含html(`flextable`)?

btxsgosb  于 2023-06-27  发布在  Git
关注(0)|答案(2)|浏览(216)

我使用webshot包和phantomjs自动截取html表格的屏幕截图并将屏幕截图包含在呈现的文档中(例如GitHub README文档)时从未遇到过问题。有关参考,请参见:https://bookdown.org/yihui/rmarkdown-cookbook/html-widgets.html
HTML widget(https://www.htmlwidgets.org)是典型的交互式JavaScript应用程序,只能在HTML输出中工作。如果您将包含HTML小部件的Rmd文档编织为非HTML格式(如PDF或Word),则可能会收到如下错误消息:
Error: Functions that produce HTML output found in document targeting X output. Please change the output type of this document to HTML. Alternatively, you can allow HTML output in non-HTML formats by adding this option to the YAML front-matter of your rmarkdown file:
always_allow_html: yes
Note however that the HTML output will not be visible in non-HTML formats.
实际上有一个比上述错误消息中提到的更好的解决方案,但它涉及额外的包。你可以在R中安装webshot包(Chang 2022),也可以安装PhantomJS:
install.packages("webshot")
webshot::install_phantomjs()
然后,如果您将带有HTML小部件的Rmd文档编织成非HTML格式,则HTML小部件将显示为静态屏幕截图。屏幕截图是在knitr中自动拍摄的。
然而,几个月前,它停止了对来自flextable包的对象的工作,然而,它仍然适用于其他html对象,如DT表。flextable作者不确定这种行为变化的原因,它可能与flextable包无关。我想知道是否有其他人可以复制,也许,指出一个解决方案。谢谢
以下是我的一个reprex尝试:

---
output:
  github_document
---

```{r versions}
packageVersion("webshot")
## [1] '0.5.4'

packageVersion("webshot2")
## [1] '0.1.0'

packageVersion("flextable")
## [1] '0.9.2.2'

webshot::is_phantomjs_installed()
## [1] TRUE

webshot::install_phantomjs()
## It seems that the version of `phantomjs` installed is greater than or equal to the 
requested version.To install the requested version or downgrade to another version, use 
`force = TRUE`.

webshot::install_phantomjs(force = TRUE)
## Warning in utils::download.file(url, method = method, ...): the 'wininet'
## method is deprecated for http:// and https:// URLs

## phantomjs has been installed to C:\Users\rempsyc\AppData\Roaming\PhantomJS
DT::datatable(head(iris))

![](https://i.stack.imgur.com/Vo5rG.png)
flextable::flextable(head(iris))

Error: Functions that produce HTML output found in document targeting 
gfm+tex_math_dollars-yaml_metadata_block output.
Please change the output type of this document to HTML.
If your aiming to have some HTML widgets shown in non-HTML format as a screenshot,
please install webshot or webshot2 R package for knitr to do the screenshot.
Alternatively, you can allow HTML output in non-HTML formats
by adding this option to the YAML front-matter of
your rmarkdown file:

  always_allow_html: true

Note however that the HTML output will not be visible in non-HTML formats.
jyztefdp

jyztefdp1#

DT是htmlwidget,flextable不是。因此,knitr所能做的自动截图并不适用于此类对象。knitr只会在webshotwebshot2可用的情况下,对htmlwidgets对象、shiny应用或嵌入URL进行截图。

我不认为flexable是输出降价在所有。所以,我会说你需要使用一个函数来转换输出。
对于本机不支持的输出,flextable现在支持进入网格对象,因此它可以像R Markdown上下文中的图一样工作。显示在https://ardata-fr.github.io/flextable-book/plotting-flextable.html

---
title: "flextable as plot"
output: 
  github_document: default
---

```{r}
plot(flextable::flextable(head(iris)))

目前这是手动的,但`knit_print.flextable`可能会默认为markdown输出,因为不支持复杂的HTML输出。
希望能帮上忙。
hs1ihplo

hs1ihplo2#

解决方案是回归到knitr版本1.40。

knitr版本1.41及更高版本现在打破了GitHub/md文档的自然html flextablewebshot图像集成。我在GitHub上发布了一个关于这个bug的问题:https://github.com/yihui/knitr/issues/2265

相关问题