我使用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.
2条答案
按热度按时间jyztefdp1#
DT是htmlwidget,flextable不是。因此,knitr所能做的自动截图并不适用于此类对象。knitr只会在webshot或webshot2可用的情况下,对htmlwidgets对象、shiny应用或嵌入URL进行截图。
我不认为flexable是输出降价在所有。所以,我会说你需要使用一个函数来转换输出。
对于本机不支持的输出,flextable现在支持进入网格对象,因此它可以像R Markdown上下文中的图一样工作。显示在https://ardata-fr.github.io/flextable-book/plotting-flextable.html
hs1ihplo2#
解决方案是回归到
knitr
版本1.40。knitr
版本1.41及更高版本现在打破了GitHub/md文档的自然htmlflextable
到webshot
图像集成。我在GitHub上发布了一个关于这个bug的问题:https://github.com/yihui/knitr/issues/2265