是否可以使用RMarkdown生成pdf格式的RTable(FlexTable)?

是否可以使用RMarkdown生成pdf格式的RTable(FlexTable)?,r,pdf,r-markdown,flextable,R,Pdf,R Markdown,Flextable,我只是好奇,是否有可能用RMarkdown生成pdf格式的RTable FlexTable?我可以在html输出中生成它,但它不适用于pdf输出。我用谷歌搜索这个问题,但没有确切的答案 我的代码: ```{r, echo=FALSE, results='asis'} library(ReporteRsjars) library(ReporteRs) library(rtable) library(dplyr) vanilla.table(iris) ``` 因为它可以在word中生成,所以我认

我只是好奇,是否有可能用RMarkdown生成pdf格式的RTable FlexTable?我可以在html输出中生成它,但它不适用于pdf输出。我用谷歌搜索这个问题,但没有确切的答案

我的代码:

```{r, echo=FALSE, results='asis'}
library(ReporteRsjars)
library(ReporteRs)
library(rtable)
library(dplyr)
vanilla.table(iris)
```
因为它可以在word中生成,所以我认为pdf是可能的

我试过catas.htmlvanilla.tableiris,但不起作用


我可以友好地问一下你对此有什么想法吗?

这不是一个答案,只是一个指向解决这个问题的可能方向的指针。一般来说,R标记文档的R代码块中的HTML输出不适用于PDF输出,因为HTML和LaTeX完全不同。然而,有一种间接的方法可以达到这个目的,那就是截取HTML输出的屏幕并插入一个图像。当输出格式不是HTML时,knitr使用这种方法处理HTML小部件。您可以在中找到技术细节 请参阅html_屏幕截图函数

基本思想是将HTML输出保存为*.HTML文件,使用需要PhantomJS的webshot包截图,然后将图像返回knitr。将这个想法推广到任何HTML输出应该不太困难,但我没有仔细考虑过。但这并不意味着你不能自己实现它。下面是我在脑海中输入的草图,当然还有很多细节需要改进:

insert_screenshot = function(x) {
  if (!inherits(x, c('html', 'shiny.tag'))) return()
  htmltools::save_html(x, 'temp.html')
  res = webshot::webshot('temp.html', 'my-screenshot.png')
  knitr::include_graphics(res)
}
谢谢@Yihui

我解决了这个问题。基本上,解决方案是通过webshot函数和knitr::include_graphics截图将这个png文件插入pdf输出

请在您的降价中尝试以下代码:

```{r TableJiena, out.width = "700px", out.length = "400px"}

insert_screenshot = function(x) {
  if (!inherits(x, c('html', 'shiny.tag'))) return()
  htmltools::save_html(x, 'temp.html')
  res = webshot::webshot('temp.html', 'my-screenshot.png')
  knitr::include_graphics(res)
}
insert_screenshot(htmltools::HTML(as.html(vanilla.table(head(iris)))))
```
如果您想获得简化的代码,请在Markdown中尝试这段代码

```{r TableJiena, out.width = "700px", out.length = "400px"}
webshot::webshot(htmltools::HTML(as.html(vanilla.table(head(iris)))), 'my-screenshot.png')
knitr::include_graphics('my-screenshot.png')
```
但是这个解决方案有一个小问题:PNG图片的解决方案不是很高,我不知道为什么每个列之间都有流。此外,一些单行打印为双线

有人能想出如何解决webshot这个小问题吗


谢谢大家!

非常感谢你的代码!我一定会努力的!我认为html截图是解决这个问题的一个很好的方向。此外,如果可以用这种方法解决这个问题,我们可以应用/扩展相同的方法将交互式图形输出为pdf问题。例如,如果我想保存“rpivotTable”这一非常有用且灵活的pivot表r包的结果,我可以截取html的屏幕截图并将图像返回knitr!再次感谢您的帮助!