2016-11-09 104 views
1

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

我的代码:

```{r, echo=FALSE, results='asis'} 
library(ReporteRsjars) 
library(ReporteRs) 
library(rtable) 
library(dplyr) 
vanilla.table(iris) 
``` 

因为它可以在字产生,我认为这是可能的PDF格式之一。我试过cat(as.html(vanilla.table(iris)))但它不工作。

我可以友好地问你是否有任何想法?

回答

1

这不是一个答案,而只是一个指向可能的方向来解决这个问题。一般来说,R Markdown文档的R代码块中的HTML输出不适用于PDF输出,这仅仅是因为HTML和LaTeX完全不同。但是,有一种间接的方式可以实现,即截取HTML输出并插入图像。当输出格式不是HTML时,这种方法用于处理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) 
} 
+0

非常感谢你的代码!我一定会努力的!我认为“截图html”是解决这个问题的一个很好的方向。另外,如果这个问题可以通过这种方式解决,我们可以应用/扩展相同的方法来将交互式图输出为pdf问题。例如,如果我想保存'rpivotTable'(针对数据透视表的非常有用和灵活的r包之一)的结果,我可以截取html的截图并将图像返回给knitr!再次感谢你的帮助! – Joanna

0

感谢@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))))) 
``` 

如果你想要得到的简化代码,请尝试这段代码在降价。

```{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

谢谢!

相关问题