2016-11-09 15 views
1

私は、RMarkdownを使用してpdfでRTable(FlexTable)を生成することが可能かどうか不思議ですか?私はhtml出力でそれを生成することができますが、pdf出力では機能しません。私はこの質問をGoogleにしましたが、それに対する正確な答えはありません。RMarkdownでpdableで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

これは答えではなく、この問題を解決するための可能な方向へのポインタです。一般に、HTMLとLaTeXがまったく違うからといって、R Markdown文書のRコードのチャンク内のHTML出力はPDF出力には使えません。しかし、そこに到達する間接的な方法があります。これは、HTML出力のスクリーンショットを取り、代わりにイメージを挿入することです。この方法は、出力形式がHTMLでない場合にHTMLウィジェットを処理するためにknitrで使用されます。技術的な詳細については、 https://github.com/yihui/knitr/blob/master/R/plot.Rhtml_screenshot()機能を参照してください)を参照してください。

基本的な考え方は、あなたが、*.htmlファイルとしてHTML出力を保存する(PhantomJSが必要です)webshotパッケージを使用してスクリーンショットを撮る、とknitrに画像を返すです。アイデアをHTML出力に一般化するのは難しいことではありませんが、私は非常に注意深く考えていません。あなたがそれを自分で実装することはできません。以下は、私は私の心の外に型付けし、改善するために多くの詳細が確かにそこにあるスケッチです:私はこの問題を考え出し@Yihuiため

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パッケージの1つ)の結果を保存したい場合は、htmlのスクリーンショットを取得してイメージをknitrに返すことができます。あなたの助けをもう一度ありがとう! – Joanna

0

おかげで、

。基本的には、解決策は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のこの小さな問題を解決する方法を知りたい人はいますか?

ありがとうございました!

関連する問題