使用R包Huxtable更改RTF输出的方向

问题描述 投票:0回答:1

Huxtable是少数支持将格式化表格写到RTF的软件包之一,这对于我要做的事情是必要的(相信我,如果我能避免使用RTF,我会的。)但是我无法在to_rtf的输出函数中或任何小插曲中找到任何选项。

理想情况下,有一种简单的方法可以执行此操作,例如quick_rtf上的选项可以执行以下操作:

ht <- as_hux(mtcars, add_colnames = TRUE)
bottom_border(ht)[1, ] <- 1
bold(ht)[1, ] <- TRUE
caption(ht) <- 'Cars'
width(ht) <- 1
quick_rtf(ht, file='test.rtf', orientation='landscape)

而且我可以强制所有单元旋转90度,但这并不是我想要的。有人有这样做的方法吗?还是我忽略了文档中的内容?

我正在考虑对to_rtf中的文本进行后期处理。我已经参考了RTF规范here,并且可以看到有关如何设置方向的格式选项,但是我不太了解如何将其应用于文档。有什么想法吗?

r reporting rtf
1个回答
1
投票

此后,我已经找到解决方案。正如@ dash2指出的那样,这不是huxtable本身内置的功能-但只需进行一些较小的修改,就可以实现。

一种方法是调整内置在quick_rtf函数中的Huxtable(位于包中的R / quick-functions.R中)。此函数还编写围绕RTF表的代码,包括字体和颜色表。在这些表之后,您可以插入一些RTF代码以控制某些文档属性。

您要用于横向的实际关键字(参考RTF specification)是\ lndscpsxn。

  • \ marglN是左边距(其中N是缇-1440缇= 1英寸)
  • \ margr是正确的
  • \ margt在最前面
  • \ margb在底部
  • \ paperw是宽度
  • \ paperh是高度
  • \ headery是标题高度
  • \ footery是页脚高度

因此,如果将所有内容放在一起(还有其他一些东西),如果您想要一个文档的边距为1英寸,页眉和页脚为0.5英寸,横向文档为8.5英寸X 11英寸,则需要一个字符串在如下所示的字体和颜色表之后:

\paperw15840\paperh12240\widowctrl\ftnbj\fet0\sectd\linex0\lndscpsxn
\margl1440\margr1440\margt1440\margb1440
\headery720\footery720

此字符串在字体和颜色表之后,但在表代码主体开始之前。因此,在quick_rtf中可以添加方向选项。如果该选项设置为landscape,则存储上面的字符串(您可以消除边距和页脚信息以保持简单,但是您可能要控制其他属性),并将其添加到写出文件的部分:

  landscape_str <- "\\paperw15840\\paperh12240\\widowctrl\\ftnbj\\fet0\\sectd\\lndscpsxn\\linex0"

  sink(file)
  tryCatch({
    cat("{\\rtf1\\ansi\\deff0\n")
    print(fc_tbls)
    # Write landscape orientation string if selected
    if (orientation == "landscape") cat(landscape_str)
    cat("\n\n\n")
    lapply(hts, print_rtf)
    cat("\n\n\n}")
  },
    error = identity,
    finally = {sink()}
  )
<< >
© www.soinside.com 2019 - 2024. All rights reserved.