R语言 为什么保存弹性表会使某些单元格为空

aoyhnmkz  于 2023-01-15  发布在  其他
关注(0)|答案(1)|浏览(138)

我把数据放进了一个flextable中。当我在RStudio中查看图像时,图像是完美的。

但当我查看保存的图像时,某些单元格变为空白

我用来保存的方法是:

saving = function(ft,path){
  gr <- gen_grob(ft, fit = "fixed", just = "center")
  dims <- dim(gr)
  png(path, width =  dims$width+.1, height = dims$height+.1, units = "in", res = 250)
  plot(gr)
  dev.off()
}
saving(ft, save_path)

当我对webshot save_as_image(ft,path = save_path,zoom = 1 ,webshot = "webshot2")使用默认的flextable保存方法时,文本显示出来,但最后一列被部分截断

这两个都不可用。有没有办法保存flextable对象,这样一切都会显示出来?
我的数据和代码如下:

q = structure(list(X1 = c("TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
"TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", " ", 
"", "", "", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
"TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
"TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
"TEXT", "TEXT", "TEXT"), X2 = c("", "TEXT", "TEXT", "TEXT", "TEXT", 
"TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", " ", 
"", "", "TEXT", "", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
"TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "", "", "TEXT", "TEXT", 
"TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
"TEXT", ""), X3 = c("", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
"TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", " ", "", "", 
"TEXT", "", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
"TEXT", "TEXT", "TEXT", "TEXT", "", "", "TEXT", "TEXT", "TEXT", 
"TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
""), X4 = c("", "", "", "", "", "", "", "", "", "", "", "", " ", 
"", "", "TEXT", "", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
"TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "", "", "TEXT", "TEXT", 
"TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
"TEXT", ""), X5 = c("", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
"TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", " ", "TEXT", 
"TEXT", "TEXT", "", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
"TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "", "TEXT", "TEXT", 
"TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
"TEXT", "TEXT"), X6 = c("", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
"TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", " ", "", "", 
"TEXT", "", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
"TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "", "TEXT", "TEXT", "TEXT", 
"TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
"TEXT"), X7 = c("", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
"TEXT", "TEXT", "TEXT", "TEXT", "TEXT", " ", "", "", "TEXT", 
"", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
"TEXT", "TEXT", "TEXT", "TEXT", "", "TEXT", "TEXT", "TEXT", "TEXT", 
"TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT"
), X8 = c("", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
"", "TEXT", "TEXT", "TEXT", "TEXT", " ", "", "", "TEXT", "", 
"TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
"TEXT", "TEXT", "TEXT", "", "", "TEXT", "TEXT", "TEXT", "TEXT", 
"TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", ""), 
    X9 = c("", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", " ", "TEXT", "TEXT", 
    "TEXT", "", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT"), X10 = c("", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    " ", "", "", "TEXT", "", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT"), X11 = c("", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", " ", "", "", "TEXT", "", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT"), 
    X12 = c("", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", " ", "", "", "TEXT", 
    "", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT"), X13 = c("", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", " ", 
    "TEXT", "TEXT", "TEXT", "", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT"), X14 = c("", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", " ", "", "", "TEXT", "", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT"), 
    X15 = c("", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", " ", "TEXT", "", 
    "TEXT", "", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT"), X16 = c("", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    " ", "", "", "", "", "", "", "", "", "", "", "", "", "", 
    "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
    ""), X17 = c("", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", " ", "", 
    "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
    "", "", "", "", "", "", "", "", "", "", "", "", ""), X18 = c("", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", " ", "", "", "", "", "", "", "", 
    "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
    "", "", "", "", "", "", ""), X19 = c("", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", " ", "", "", "", "", "", "", "", "", "", "", "", 
    "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
    "", "", ""), X20 = c("", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", " ", 
    "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
    "", "", "", "", "", "", "", "", "", "", "", "", "", ""), 
    X21 = c("", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", " ", "", "", "", 
    "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
    "", "", "", "", "", "", "", "", "", "", ""), X22 = c("", 
    "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", 
    "TEXT", "TEXT", "TEXT", " ", "", "", "", "", "", "", "", 
    "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
    "", "", "", "", "", "", "")), row.names = c(NA, 42L), class = "data.frame")

p2_col_names = c("", letters[1:2], "", letters[3:20])
ft = q %>%
  flextable() %>%
  merge_at(i = 14, j = 5:7) %>%
  merge_at(i = 15, j = 5:7)%>%
  merge_at(i = 14, j = 9:12)%>%
  merge_at(i = 15, j = 9:12)%>%
  #merge_at(i = 11, j = 13:14)%>%
  #merge_at(i = 11, j = 13:14) %>%
  fontsize(size = 7, part = "all") %>%
  width(1,2) %>%
  line_spacing(space = 0.5, part = "body") %>%
  set_header_labels(values = list(
    X1 = p2_col_names[1],
    X2 = p2_col_names[2],
    X3 = p2_col_names[3],
    X4 = p2_col_names[4],
    X5 = p2_col_names[5],
    X6 = p2_col_names[6],
    X7 = p2_col_names[7],
    X8 = p2_col_names[8],
    X9 = p2_col_names[9],
    X10 = p2_col_names[10],
    X11 = p2_col_names[11],
    X12 = p2_col_names[12],
    X13 = p2_col_names[13],
    X14 = p2_col_names[14],
    X15 = p2_col_names[15],
    X16 = p2_col_names[16],
    X17 = p2_col_names[17],
    X18 = p2_col_names[18],
    X19 = p2_col_names[19],
    X20 = p2_col_names[20],
    X21 = p2_col_names[21],
    X22 = p2_col_names[22]
  )) %>%
  add_header_row(values = c("", "A", " ", "B", "C", "D", "E", "F"),
                 colwidths = c(4,3,1,4,2,3,4,1)) %>%
  add_header_row(values = c("", "G","", "H", "I", "J", "K", "L"),
                 colwidths = c(4,3,1,4,2,3,4,1) ) %>%
  # clean up and add borders
  border_remove() %>%
  hline(i = 12, part = "body", border = p2_header_border) %>%
  hline(i = which(q$X1 == "dsf")-1, part = "body", border = p2_header_border, j = 1:15) %>%
  hline(i = which(q$X1 %in% c("sdf", "dsf")), 
        part = "body", border = p2_header_border, j = 1:15) %>%
  hline(i = which(q$X1 %in% c("few", "dsf"))-1, 
        part = "body", border = p2_header_border, j = 1:15) %>%
  hline(i = 13, part = "body", border = p2_header_border, j = 1:15) %>%
  hline(i = 3, part = "header", border = p2_header_border) %>%
  hline_top( part = "header", border = p2_header_border) %>%
  vline_left(part = "header", border = p2_header_border) %>%
  vline(j = c(7,8,12,14,17,21,22), part = "header", border = p2_header_border) %>%
  vline(j = c(7,8,12,14,17,21,22), part = "body", border = p2_header_border, i = 1:12) %>%
  vline(j = c(7,8,12,14,15), part = "body", border = p2_header_border, i = 14:nrow(q)) %>%
  vline_left(part = "body", i = c(1:12, 14:nrow(q)), border = p2_header_border) %>%
  # grey boxes
  vline(i = 3, j = c(6,7,10,11, 16, 19,20), part = "header", border = box_border) %>%
  vline(i = 1:12, j = c(6,7, 10,11, 16, 19,20), part = "body", border = box_border) %>%
  hline(i = 2, j = c(7,11,17,20), part = "header") %>%
  hline(i = 12, j = c(7,11,17,20), part = "body") %>%
  vline(i = 16:nrow(q), j = c(6,7,10,11), part = "body", border = box_border) %>%
  hline(i = 15, j = c(7,11), part = "body") %>%
  #bold and colour
  bold(part = "header", i = 1:2) %>%
  bold(j = 1, part = "body") %>%
  bold(i = which(q$X1 %in% c("sdd", "rd")),
       part = "body") %>%
  bold(i = which(q$X1 == "rad")-2:3, part = "body") %>%
  color(j = c(7,11,12,17,20), color = colormatrix) %>%
  color(i = which(q$X1 %in% c("sdf", "dsf","yj")), 
        j = 1,
        color = row_blue) %>%
  width(1:22,
        c(1.5, rep(7.5/21,21))) %>%
  line_spacing(part = "body", space = 0.5) %>%
  line_spacing(i = which(q$X1 == "tt")-1:3, part = "body", space = 1) %>%
  line_spacing(i = 1:2, part = "header", space = 1) %>%
  #merging

  merge_at(i = 1,j = 5:7, part = "header") %>%
  merge_at(i = 1,j = 9:12, part = "header") %>%
  merge_at(i = 1,j = 13:14, part = "header") %>%
  merge_at(i = 1,j = 15:17, part = "header") %>%
  merge_at(i = 1,j = 18:21, part = "header") %>%
  merge_at(i = 2,j = 5:7, part = "header") %>%
  merge_at(i = 2,j = 9:12, part = "header") %>%
  merge_at(i = 2,j = 13:14, part = "header") %>%
  merge_at(i = 2,j = 15:17, part = "header") %>%
  merge_at(i = 2,j = 18:21, part = "header") %>%
  align(part = "header", i = 1:2, align = "center") %>%
  align(i = which(q$X1 == "df")-2:3, part = "body", align = "center") %>%
  bg(i = c(3,5,7,9, 11), bg =bg_grey , part = "body") %>%
  bg(i = c(18,20,22,24, 26, 28,
           31, 33, 35, 37, 39, 41), j = 1:15, bg =bg_grey , part = "body") %>%
  footnote(i = 3, j = 7,
           value = as_paragraph(""),
           ref_symbols = "1",
           part = "header", inline = TRUE) %>%
  footnote(i = 16, j = 7,
           value = as_paragraph(""),
           ref_symbols = "1",
           part = "body", inline = TRUE) %>%
  footnote(i = 3, j = 11,
           value = as_paragraph(""),
           ref_symbols = "2",
           part = "header", inline = TRUE) %>%
  footnote(i = 16, j = 11,
           value = as_paragraph(""),
           ref_symbols = "2",
           part = "body", inline = TRUE) %>%
  footnote(i = 1, j = 18,
           value = as_paragraph(""),
           ref_symbols = "3",
           part = "header", inline = TRUE) %>%
  footnote(i = 3, j = 21,
           value = as_paragraph(""),
           ref_symbols = "4,",
           part = "header", inline = TRUE) %>%
  footnote(i = 16, j = 4,
           value = as_paragraph(""),
           ref_symbols = "5",
           part = "body", inline = TRUE) %>%
  footnote(i = c(29,42), j = 1,
           value = as_paragraph(""),
           ref_symbols = "6, ",
           part = "body", inline = TRUE) %>%
  footnote(i = c(29,42),  j = 1,
           value = as_paragraph(""),
           ref_symbols = "7",
           part = "body", inline = TRUE) %>%
  color(part = 'footer', color = white)
vwkv1x7d

vwkv1x7d1#

这是一个字体问题,png()不知道如何上标或遇到渲染字体的问题。我建议使用支持systemfonts的图形设备:破布、玻璃粉(或石墨)。

saving = function(ft,path){
  gr <- gen_grob(ft, fit = "fixed", just = "center")
  dims <- dim(gr)
  ragg::agg_png(path, width =  dims$width+.1, height = dims$height+.1, units = "in", res = 250)
  plot(gr)
  dev.off()
}
saving(ft, save_path)

相关问题