2016-11-09 4 views
1

Ich bin nur neugierig, ist es möglich, die RTable (FlexTable) in PDF mit RMarkdown zu generieren? Ich kann es in HTML-Ausgabe generieren, aber es funktioniert nicht für die PDF-Ausgabe. Ich google diese Frage, aber es gibt keine genaue Antwort dafür.Ist es möglich, die RTable (FlexTable) in pdf mit RMarkdown zu generieren?

Mein Code:

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

Da es in Wort erzeugen kann, ich nehme an, es für die pdf einer möglich ist.

Ich habe versucht cat(as.html(vanilla.table(iris))), aber es funktioniert nicht.

Kann ich freundlich fragen, ob Sie eine Idee davon haben?

Antwort

1

Dies ist keine Antwort, sondern nur ein Hinweis auf die mögliche Richtung, um dieses Problem zu lösen. Im Allgemeinen funktioniert HTML-Ausgabe in R-Code-Chunks eines R-Markdown-Dokuments nicht für PDF-Ausgabe, nur weil HTML und LaTeX völlig unterschiedlich sind. Es gibt jedoch einen indirekten Weg dahin, um einen Screenshot der HTML-Ausgabe zu erstellen und stattdessen ein Bild einzufügen. Dieser Ansatz wird in knitr verwendet, um HTML-Widgets zu behandeln, wenn das Ausgabeformat nicht HTML ist. Die technischen Details finden Sie unter https://github.com/yihui/knitr/blob/master/R/plot.R (siehe Funktion html_screenshot()).

Die Grundidee ist, dass Sie die HTML-Ausgabe als *.html Datei speichern, einen Screenshot mit dem webshot Paket und schicken Sie das Bild auf knitr (die PhantomJS erfordert). Es sollte nicht zu schwierig sein, die Idee auf irgendeine HTML-Ausgabe zu verallgemeinern, aber ich habe nicht sehr sorgfältig darüber nachgedacht. Dies bedeutet jedoch nicht, dass Sie es nicht selbst implementieren können. Nachfolgend finden Sie eine Skizze, die ich aus meinem Kopf getippt und es gibt sicherlich eine Menge Details zu verbessern:

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

Vielen Dank für den Code! Ich werde definitiv daran arbeiten! Ich denke "Screenshot the html" ist eine sehr gute Richtung, um dieses Problem zu lösen. Wenn dieses Problem auf diese Weise gelöst werden kann, können wir dieselbe Methode anwenden, um interaktive Grafiken in PDF-Ausgaben auszugeben. Wenn ich zum Beispiel die Ergebnisse von 'rpivotTable' speichern möchte (eines der sehr nützlichen und flexiblen Pakete für Pivot-Tabellen), kann ich den Screenshot von html machen und das Bild an knitr zurückgeben!Nochmals vielen Dank für Ihre Hilfe! – Joanna

0

Dank für @Yihui,

ich dieses Problem herausgefunden. Grundsätzlich ist die Lösung, den Screenshot von webshot Funktion und knitr::include_graphics zu nehmen, um diese PNG-Datei in die PDF-Ausgabe einzufügen.

Bitte versuchen Sie dieses Stück Code in Ihre Abschlags:

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

Wenn Sie den vereinfachten Code erhalten möchten, wenden Sie sich bitte dieses Stück Code in Markdown versuchen.

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

Aber es ist ein winziges Problem dieser Lösung: Die Lösung des Bildes PNG ist nicht sehr hoch, und ich weiß nicht, warum es fließt zwischen jeder Spalte sind. Außerdem werden einige einzelne Zeilen in doppelten Zeilen gedruckt.

Kann jemand herausfinden, wie diese kleine Ausgabe von webshot zu lösen?

Vielen Dank!

Verwandte Themen