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

R语言使用Tabulizer提取PDF表格时触发Java非法访问报错

Tabulizer提取PDF表格报Java模块访问错误解决方案

问题根因

该报错由Java 9+版本引入的JPMS模块访问限制导致:高版本JDK默认禁止未命名模块访问java.base核心模块下的类成员,旧版rJava、tabulizer未适配该权限规则,在M1芯片Mac设备上安装最新版JDK时会触发该问题,和PDF合并、文件路径的代码逻辑无关。

核心报错信息:Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl, : java.lang.IllegalAccessException: class RJavaTools cannot access a member of class java.util.ArrayList$Itr (in module java.base) with modifiers "public"

分步解决方法

  • 替换兼容版本JDK
    卸载当前安装的高版本Java,安装aarch64架构适配M1芯片的JDK 8或者JDK 11(这两个版本是tabulizer官方验证的全兼容版本,无模块访问限制),安装完成后在终端执行/usr/libexec/java_home -V确认已安装的JDK路径。
  • 配置R端Java环境
    打开R/RStudio,在加载rJava、tabulizer之前先配置JAVA_HOME环境变量,示例代码如下:
    # 替换路径为上一步查到的JDK8/JDK11的实际Home路径
    Sys.setenv(JAVA_HOME = "/Library/Java/JavaVirtualMachines/temurin-11.jdk/Contents/Home")
    library(rJava)
    # 初始化JVM验证是否加载正常,无报错则配置成功
    .jinit()
    
  • 临时兼容方案(不降级Java时使用)
    如果不想卸载高版本JDK,在启动RStudio之前,先在终端执行如下命令配置JVM启动参数,放开模块访问权限后再启动RStudio即可:
    export JAVA_TOOL_OPTIONS="--add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED"
    open -a RStudio
    
  • 重装适配M1架构的依赖包
    完成Java配置后,重装相关依赖包避免架构不匹配问题,在R控制台执行:
    remove.packages(c("tabulizer", "rJava", "tabulizerjars"))
    install.packages(c("rJava", "tabulizerjars", "tabulizer"), type = "binary")
    

验证代码

完成上述配置后,运行原复现代码即可正常提取表格:

library(tabulizer)
library(rJava)
library(pdftools)
setwd(file.path(dirname(rstudioapi::getActiveDocumentContext()$path),'Input Files'))

pdf_files<- list.files(pattern = ".pdf$")

pdf_joined<- pdf_combine(pdf_files,output = "joined.pdf")
f <- "joined.pdf"

out1 <- extract_tables(f)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:33:10