如何在R中使用media_extract提取Word、PPT图片并插入R Markdown
officer包提取Office文档图片并插入R Markdown操作指南
问题1:PPT提取图片插入R Markdown的方法
media_extract的返回值本身就是布尔类型,仅用于标识提取操作是否成功,图片内容会直接写入你通过target参数指定的路径中,不会作为返回值返回,因此不需要将该函数的运行结果赋值给变量使用。
你已经拿到了存储输出路径的png_file变量,直接调用knitr的图片插入函数即可将图片导入R Markdown报告,完整示例如下:
library(officer) library(knitr) example_pptx <- system.file(package = "officer", "doc_examples/example.pptx") doc <- read_pptx(example_pptx) content <- pptx_summary(doc) image_row <- content[content$content_type %in% "image", ] media_file <- image_row$media_file png_file <- tempfile(fileext = ".png") # 执行即完成提取到png_file路径,无需赋值 media_extract(doc, path = media_file, target = png_file) # 直接插入图片到报告 include_graphics(png_file)
如果需要插入多张图片,只需要循环给每张图片生成不同的target临时路径,依次提取插入即可。
问题2:从docx文档中提取图片的操作方法
docx格式的本质是压缩包,所有内嵌媒体资源都存储在压缩包的word/media/子目录下,你可以按照以下步骤提取:
- 读取docx文档后,先获取文档内所有媒体文件的内部路径,路径顺序和图片在文档中出现的顺序完全对应
- 按照图片顺序选择对应路径,调用
media_extract提取 - 同样用
include_graphics插入报告
完整示例代码如下:
library(officer) library(knitr) library(tools) example_docx <- system.file(package = "officer", "doc_examples/example.docx") doc <- read_docx(example_docx) # 获取docx内所有媒体文件的内部路径 media_list <- dir(doc$package, pattern = "word/media/", full.names = FALSE) # 可选:过滤非图片类媒体文件 media_list <- media_list[grepl("\\.(png|jpg|jpeg|gif|bmp)$", media_list, ignore.case = TRUE)] media_paths <- file.path("word/media", media_list) # 提取第1张图片,根据需要修改索引即可 target_img <- media_paths[1] output_path <- tempfile(fileext = file_ext(target_img)) # 保留原始文件后缀 media_extract(doc, path = target_img, target = output_path) # 插入到报告 include_graphics(output_path)
内容的提问来源于stack exchange,提问作者l.iles
相关产品推荐
相关产品推荐

