You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R Markdown的flextable中渲染图片并输出Word文档

问题描述

在R Markdown中尝试将图片嵌入flextable表格并输出为Word文档时,表格内仅显示图片路径,而非图片本身。

解决方案

核心是通过officer包的文档对象处理包含图片的flextable,确保图片被正确嵌入Word。以下是修正后的完整代码:

完整R Markdown代码

---
title: "带图片的表格"
output: word_document
params:
  img_path1: "Excel whole.png" # 确保图片在当前工作目录下,或填写完整绝对路径
---
library(officer)
library(flextable)
# 创建基础数据框
virus_summary <- data.frame(
  Task = "Word Table",
  "Completion Date" = as.character(format(Sys.Date(), '%B %d, %Y')),
  stringsAsFactors = FALSE
)

# 基于参数创建图片对象
img_object <- as_image(src = params$img_path1, width = 1)

# 构建包含图片的flextable
virus_tbl <- virus_summary |>
  flextable() |>
  compose(
    j = "Task",
    i = 1,
    value = as_paragraph(
      as_chunk("\n"),
      as_chunk("Word Table"),
      as_chunk("\n"),
      as_chunk("\n"),
      img_object
    )
  ) |>
  border_remove() |>
  hline(part = "all", border = fp_border(color="black")) |>
  vline(border = fp_border(color="black")) |>
  vline_left(border = fp_border(color="black")) |>
  hline_top(part = "all", border = fp_border(color="black")) |>
  bold(bold = TRUE, part = "header") |>
  width(width = 7.9, j = 1, unit = "cm") |>
  width(width = 6.5, j = 2, unit = "cm") |>
  padding(padding = 10, part = "all")

# 用officer创建Word文档并插入表格,这是图片正确渲染的关键步骤
doc <- read_docx() |>
  body_add_flextable(virus_tbl)

# 输出文档(编织Rmd时自动生成,也可指定输出路径)
print(doc, target = "带图片的表格.docx")

关键修改说明

  1. 用officer管理文档:直接打印flextable对象无法触发图片嵌入逻辑,必须通过read_docx()创建Word文档对象,再用body_add_flextable()插入表格,确保图片被正确嵌入到Word中。
  2. 统一路径管理:通过YAML参数params$img_path1管理图片路径,避免硬编码,同时要保证路径正确(支持相对路径或完整绝对路径)。
  3. 简化依赖:移除了无需使用的kableExtra包,减少不必要的依赖。

内容的提问来源于stack exchange,提问作者Golem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 22:23:11