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

时间:2016-11-09 21:16:30

标签: r pdf r-markdown flextable

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

我的代码:

scrollY: ...,

由于它可以生成单词,我认为它可以用于pdf。

我已经尝试了```{r, echo=FALSE, results='asis'} library(ReporteRsjars) library(ReporteRs) library(rtable) library(dplyr) vanilla.table(iris) ``` ,但它无效。

我可以友好地询问你是否知道它?

2 个答案:

答案 0 :(得分:2)

这不是一个答案,而只是指向解决此问题的可能方向的指针。一般来说,R Markdown文档的R代码块中的HTML输出不能用于PDF输出,只是因为HTML和LaTeX完全不同。但是,有一种间接的方法可以实现,即获取HTML输出的屏幕截图并插入图像。当输出格式不是HTML时,此方法在 knitr 中用于处理HTML小部件。您可以在中找到技术细节 https://github.com/yihui/knitr/blob/master/R/plot.R(请参阅html_screenshot()函数)。

基本思路是将HTML输出保存为*.html文件,使用 webshot 包(需要PhantomJS)截取屏幕截图,然后将图像返回到 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)
}

答案 1 :(得分:1)

感谢@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的这个小问题吗?

谢谢!