Можно ли сгенерировать RTable (FlexTable) в PDF с RMarkdown?
Мне просто интересно, можно ли сгенерировать RTable (FlexTable) в pdf с помощью RMarkdown? Я могу сгенерировать его в выводе HTML, но он не работает для вывода PDF. Я гуглю этот вопрос, но нет точного ответа на него.
Мой код:
```{r, echo=FALSE, results='asis'}
library(ReporteRsjars)
library(ReporteRs)
library(rtable)
library(dplyr)
vanilla.table(iris)
```
Так как он может генерировать в слове, я предполагаю, что это возможно для PDF.
я пытался cat(as.html(vanilla.table(iris)))
Но это не работает.
Могу ли я по-дружески спросить, есть ли у вас какие-либо идеи об этом?
2 ответа
Это не должен быть ответ, а только указатель на возможное направление для решения этой проблемы. В общем, вывод HTML в фрагментах кода R документа R Markdown не будет работать для вывода PDF, просто потому что HTML и LaTeX совершенно разные. Тем не менее, есть косвенный способ попасть туда, а именно: сделать снимок экрана с выводом HTML и вставить вместо него изображение. Этот подход используется в knitr для работы с виджетами 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)
}
Спасибо за @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
?
Спасибо!