在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的规则,代码参考:
该方案仅适配Java 9~Java 17版本,更高版本Java可能依然会触发报错,长期使用仍建议降级到Java 11。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")
内容的提问来源于stack exchange,提问作者SeñorMonkey
相关产品推荐
相关产品推荐

