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

如何使用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
  • 第二步:在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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:05:21