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

在R中使用tabulizer提取PDF表格触发rJava权限报错怎么解决?

报错原因

该报错由rJava包与本地高版本Java的模块封装规则冲突导致:tabulizer依赖的底层Java逻辑适配的是Java 8、Java 11这类长期支持版本,若本地安装的是Java 16及以上版本,Java默认的强封装机制会禁止RJavaTools访问ArrayList的内部迭代器成员,进而触发IllegalAccessException异常。

解决方法
  • 方案1:降级Java版本(最稳定,推荐)
    卸载本地现有高版本Java,安装OpenJDK 11或Oracle JDK 11,安装完成后重新配置rJava环境,重启R会话后再运行代码即可。
    同时你可以给extract_tables新增pages = 2参数,只解析目标表格所在的第2页,既提升运行速度也能降低无关页面带来的报错概率,修改后代码参考:
    options(java.parameters = "-Xmx2g") # 可选,给Java分配更大内存避免大文件报错
    pacman::p_load(
      rJava,
      tabulizer,
      tidyverse)
    
    Df <- extract_tables(
      file   = "C:/Users/afons/Epidemiology2021/BOLETIM EPIDEMIOLÓGICO COVID_FMV_26Julho-8Agosto2021.pdf", 
      pages = 2,
      method = "decide", 
      output = "data.frame")
    
  • 方案2:添加Java启动参数(不想降级Java的临时解决方案)
    在加载rJava前先配置Java模块访问权限,适配高版本Java的规则,代码参考:
    options(java.parameters = c("--add-opens=java.base/java.util=ALL-UNNAMED", "-Xmx2g"))
    pacman::p_load(
      rJava,
      tabulizer,
      tidyverse)
    
    Df <- extract_tables(
      file   = "C:/Users/afons/Epidemiology2021/BOLETIM EPIDEMIOLÓGICO COVID_FMV_26Julho-8Agosto2021.pdf", 
      pages = 2,
      method = "decide", 
      output = "data.frame")
    
    该方案仅适配Java 9~Java 17版本,更高版本Java可能依然会触发报错,长期使用仍建议降级到Java 11。

内容的提问来源于stack exchange,提问作者SeñorMonkey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:15:03