0

我正在尝试创建包含一些文本和表格的参数化 R 降价报告。我首先创建 html 输出(并将 css 用于自定义样式),然后使用 pagedown 包打印它们。除了在某些报告中表格在分页符上打印效果不佳之外,一切都接近完美。我找不到问题是来自可反应包还是 pagedown。但我也尝试从 Chrome 手动打印,但输出看起来并不完全相同。在某些情况下,结果很好,在某些情况下,新页面上的第一行仍然有点挤压(尽管比 pagedown::chrome_print 少)。

这是输出的样子:1

它应该是什么样子:2

示例代码:

---
title: "test"
output: html_document
knit: pagedown::chrome_print
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
library(reactable)
# create some input
sometext <- "Lorem ipsum dolor sit amet, consectetur adipiscing elit. In mattis nec erat et pellentesque. Integer varius rhoncus velit, a luctus lectus aliquam vitae. Mauris pulvinar turpis nibh, ut porttitor velit congue luctus. Mauris cursus convallis dui molestie ornare. Vestibulum enim nibh, iaculis aliquam velit in, aliquam placerat enim. Sed interdum non ex et fringilla. Quisque massa orci, auctor nec consequat non, posuere eget mi. Vestibulum lacinia quis arcu vel malesuada. In risus lacus, auctor at nisi non, tincidunt condimentum enim. Maecenas posuere pellentesque feugiat. Cras vel lectus placerat, euismod ipsum a, vulputate felis. Morbi bibendum ex id quam consectetur dapibus. Ut vel magna ac nulla venenatis imperdiet sit amet in mi."
sometext <- strsplit(sometext, split = ",")[[1]]
sometext <- rep(sometext, 3)
sometext <- as.data.frame(matrix(sometext, ncol = 2))
```
<br><br>

```{r}
reactable::reactable(sometext, sortable = FALSE, highlight = TRUE, pagination = FALSE, rownames = TRUE, columns = list('V1' = colDef(maxWidth = 355),'V2' = colDef(maxWidth = 355)))
```

你有什么建议可以通过不同的设置来使它工作吗?

4

1 回答 1

1

最后,我在不同的表格包中找到了解决方案,因此我将其发布在这里以供将来参考。

我使用了格式化包:

```{r}
row.names(sometext) <- NULL
formattable::format_table(sometext, align = "l")
```

为了实现与 reactable 相同的格式,我添加了一个 css 代码:

.table tbody tr td {
    padding: 7px 9px;
    line-height: 1.42857143;
    vertical-align: top;
    border-top: .5px solid #f2f2f2 }

.table thead tr th {
    padding: 7px 9px;
    vertical-align: bottom;
    border-bottom: 2px solid #e9e9e9 }

实际上,使用 formattable 打印效果会更好,因为它会自动在新页面上添加页眉。

于 2021-02-16T23:46:18.737 回答