我很好奇,是否可以使用RMarkdown以pdf格式生成RTable(FlexTable)?我可以在html输出中生成它,但它不适用于pdf输出。我谷歌这个问题,但没有确切的答案。
我的代码:
scrollY: ...,
由于它可以生成单词,我认为它可以用于pdf。
我已经尝试了```{r, echo=FALSE, results='asis'}
library(ReporteRsjars)
library(ReporteRs)
library(rtable)
library(dplyr)
vanilla.table(iris)
```
,但它无效。
我可以友好地询问你是否知道它?
答案 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
的这个小问题吗?
谢谢!