Rmarkdown PDF中数据表屏幕截图中的空白区域

时间:2017-06-22 10:58:35

标签: r shiny r-markdown dt

我正面临着一个问题,就是可能需要获取html小部件的屏幕截图以供进一步实施,例如pdf文档。 datatableDT包)的屏幕截图具有太高的高度,在rmarkdown文档中显示为空白区域(fig.cap的位置很容易发现它,这是在datatable的结尾之下。我无法理解为什么会发生这种情况,我想将其删除datatable下没有空格)。请看下面的示例test.Rmd,它充分显示了问题:

---
output:
  pdf_document:
    toc: yes
header-includes:
    - \usepackage{fancyhdr}
    - \usepackage[ngerman]{babel}
---
\addtolength{\headheight}{1.0cm} 
\pagestyle{fancyplain} 
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\footrulewidth}{0.4pt}
\chead{Test}
\lhead{\scriptsize\today}


```{r, fig.align='center', fig.pos='htb!', fig.width=12, fig.cap="The height of screenshot is too high!!",fig.height=3,echo=FALSE, cache=FALSE, warning = FALSE, message = FALSE, tidy=TRUE}
library(DT)
library(webshot)
datatable(mtcars[1:2,],rownames=FALSE, options = list(dom='t',ordering=F))
```

enter image description here

  • 此外,我在datatable尝试了不同数量的显示行,我注意到datatable 是否有> 20 行然后使用标题显示良好
  • 但是,原始pdf文件中的表格例如 2行可能更多 - >行数是反应性的,因此{{1是一个属于rmarkdown)的可下载报告,这就是为什么在示例中我只使用了来自shiny app数据集的两行。

3 个答案:

答案 0 :(得分:1)

您可以尝试将以下内容添加到r chunk,看看是否有效:

screenshot.opts = list(delay = 1, cliprect = c(0, 0, 1000, 150)), dev='jpeg'

enter image description here

答案 1 :(得分:0)

在你抓住桌子的网页上,有一个CSS选择器吗?如果你能找到一个只包围桌子,它可能只是抓住桌子而不是整个页面的镜头。见这个例子:

webshot("http://www.nfl.com/superbowl/results/superbowl/", "nfl.png",
         selector = "div.columnStats")

要查找CSS选择器,我在浏览器中访问了网页(在本例中为http://www.nfl.com/superbowl/results/superbowl/),然后按Ctrl + u查看源代码。我滚动直到找到了桌子并在1374号线找到了

<!-- Records table -->
    <div class="columnStats">

我将div class="columnStats"翻译成我为选择器指定的选项div.columnStats

Windows

我能够重现你的错误。在您的实际应用程序中是否有可以指定的CSS选择器? (见上面的NFL例子)。

<强> MAC

空格没问题。这就是我的所作所为:

我从未使用DTwebshot或PhantomJS。所以之后:

install.packages("DT")
install.packages("webshot")
webshot::install_phantomjs()

我编织了测试。你在我的Mac上发布了 并得到了:

enter image description here

答案 2 :(得分:0)

我在使用renderUI呈现datatable对象的Shiny应用中遇到此问题。我必须添加width = 100%height = 100%。所以也许试试:

datatable(mtcars[1:2, ], rownames = FALSE, options = list(dom = "t", ordering = F), height = "100%")