R语言 另存为图像时,标题未显示在flextable表格中

amrnrhlw  于 2023-05-20  发布在  其他
关注(0)|答案(1)|浏览(220)

我想将flextable对象另存为图像。我可以在查看器中看到带有标题的表格。但是,当我将此保存为图像时,标题不再出现。这是今天才改变的,以前不是问题。我试图更改表格和标题的字体,并更新了我的flextable包版本。使用最新版本flextable_0.9.1
我遇到的另一个问题是如何改变标题和表格的字体

> gdtools::installed_gfonts()
[1] "Poppins"   "Noto Sans"

这就是我正在做的:

i1= flextable(head(iris))%>%
  set_caption( "My table")

save_as_image(i1, "Outputs/i1.png")

这是保存的图像文件:

#And trying to change font of caption:

i2= flextable(head(iris))%>%
  set_caption(as_paragraph( "My table"))

font(i2, fontname = "Noto Sans", part = "all")

or 
i3= flextable(head(iris))%>%
  set_caption(as_paragraph(as_chunk( "My table")))
font(i3, fontname = "Noto Sans", part = "all")

标题字体不变

w1jd8yoj

w1jd8yoj1#

您在查看器中看到的版本是由以下人员隐式创建的:

> flextable:::print.flextable
function (x, preview = "html", align = "center", ...) 
{
    # various if/else options (omitted for brevity)
    else if (preview == "html") {
        print(browsable(htmltools_value(x = x, ft.align = align)))
    }
    # various other if/else options (also omitted for brevity)
    invisible(NULL)
}

而从save_as_image获得的版本,从0.9.1开始,是:

> save_as_image
function (x, path, expand = 10, res = 200, ...) 
{
    # checks on object's class (omitted for brevity)

    gr <- gen_grob(x, fit = "fixed", just = "center")

    # saving generated grob (also omitted for brevity)
}

前者在内部调用htmltools_value(),包含处理flextable标题的代码。后者的等价物(gen_grob)则没有。这就是为什么您在查看器中看到的和保存的图像之间的结果不同。
至于为什么这个变化最近才出现,我猜你原来的flextable版本是从一段时间以前开始的,当时save_as_image函数的早期版本通过对flextable的HTML输出进行截图来工作,并得到了webshot /webshot 2包的支持(这是一个link到2023年1月的代码库快照,其中描述了这个函数)。
包创建者在他的GH repo上最近的issue中提到了这一点:
是的,有很多关于webshotwebshot2的投诉,所以我们决定停止使用它。
现在save_as_image()只使用ragg并生成png,我们对这个版本很满意。
我想最终,不同的输出选项在表格标题方面有不同的约定,每个人都希望在Word文档,PowerPoint甲板,PDF文件,HTML页面等中具有完全相同的外观,这似乎并不自然。因此,save_as_image可能故意看起来与html输出版本不同。我没资格说。
在问题的第二部分,如果你想改变标题的外观(在html输出中),你可以在as_chunk中指定它,例如:

flextable(head(iris))%>%
  set_caption(as_paragraph(as_chunk( "My table", 
                                     props = fp_text_default(color = "red", 
                                                             font.family = "Times New Roman"))))

相关问题