2016-11-09 106 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

謝謝!

相關問題