如何使用R提取并读取PDF中的XML附件?pdftools暂不支持
用R提取PDF中的XML附件
可行,你可以借助qpdf这个命令行工具配合R来实现,步骤如下:
第一步:安装qpdf工具
不同系统安装方式不同:- Windows:用Chocolatey包管理器执行
choco install qpdf,也可从qpdf官方渠道下载安装包手动安装 - macOS:用Homebrew执行
brew install qpdf - Linux:用系统包管理器,比如Debian/Ubuntu系执行
sudo apt install qpdf
- Windows:用Chocolatey包管理器执行
第二步:在R中调用qpdf提取附件
可以用system()函数直接执行qpdf命令,批量处理多个PDF也很方便,示例代码如下:# 单个PDF文件处理 pdf_path <- "path/to/your/target.pdf" output_dir <- "path/to/save/attachments" dir.create(output_dir, recursive = TRUE, showWarnings = FALSE) # 可选:先查看PDF内的附件列表 system(sprintf("qpdf --show-attachments %s", pdf_path)) # 提取所有附件到指定目录 system(sprintf("qpdf --extract-attachments %s %s", pdf_path, output_dir)) # 批量处理文件夹下所有PDF pdf_files <- list.files("path/to/pdf/folder", pattern = "\\.pdf$", full.names = TRUE) for (pdf in pdf_files) { # 为每个PDF创建单独的子目录存放附件 file_subdir <- file.path(output_dir, tools::file_path_sans_ext(basename(pdf))) dir.create(file_subdir, recursive = TRUE, showWarnings = FALSE) system(sprintf("qpdf --extract-attachments %s %s", pdf, file_subdir)) }第三步:读取提取后的XML文件
提取完成后,用R的xml2包读取并处理XML内容:library(xml2) # 遍历所有提取出的XML文件 xml_files <- list.files(output_dir, pattern = "\\.xml$", full.names = TRUE, recursive = TRUE) for (xml_path in xml_files) { xml_doc <- read_xml(xml_path) # 这里添加你的XML解析逻辑,比如提取节点、导出数据等 print(xml_doc) }
说明:qpdf是专门处理PDF的轻量工具,支持提取内嵌附件,R通过调用它可弥补pdftools在附件提取上的功能缺口,批量处理效率也能满足需求。
内容的提问来源于stack exchange,提问作者Karsten W.
相关产品推荐
相关产品推荐

