flextable保存为图片时标题丢失及标题字体修改问题
问题1:保存图片时标题消失
在flextable 0.9.1版本中,save_as_image()默认仅导出表格主体部分,不会自动包含set_caption()添加的标题。可以通过以下两种方式解决:
方法1:将标题转为表格头部行
直接把标题作为表格的顶部行添加,确保导出时包含在内:i1 <- flextable(head(iris)) %>% add_header_lines("My table") %>% align(align = "center", part = "header") # 标题居中对齐 save_as_image(i1, "Outputs/i1.png")方法2:结合ggplot导出带标题的图片
将flextable转为栅格对象后,用ggplot添加标题并保存:library(ggplot2) ft_raster <- as_raster(i1) ggplot() + annotation_raster(ft_raster, xmin = 0, xmax = 1, ymin = 0, ymax = 1) + labs(title = "My table") + theme_void() + theme(plot.title = element_text(hjust = 0.5, size = 12)) ggsave("Outputs/i1.png", width = 6, height = 4)
问题2:字体设置不生效
font(part = "all")仅作用于表格的body、header、footer区域,不会影响set_caption()添加的标题。需要单独为标题文本指定字体,同时确保表格部分的字体设置正确:
# 正确设置表格和标题字体 i4 <- flextable(head(iris)) %>% # 设置表格所有区域的字体 font(fontname = "Noto Sans", part = "all") %>% # 直接在标题文本块中指定字体 set_caption(as_paragraph( as_chunk("My table", props = fp_text_default(fontname = "Noto Sans", size = 12)) )) save_as_image(i4, "Outputs/i4.png")
如果仍不生效,检查系统中字体的完整名称(注意大小写和后缀):
# 查看已安装字体的完整名称 gdtools::list_fonts()
使用输出的完整名称替换代码中的字体名,比如"Noto Sans Regular",同时确保gdtools和ragg包为最新版本:
install.packages(c("gdtools", "ragg"))
内容的提问来源于stack exchange,提问作者Mark Davies
相关产品推荐
相关产品推荐

