R调用pdftools报poppler版本0.73.0低于0.89要求如何排查解决
poppler版本不匹配报错排查修复方案
报错核心原因:pdftools从3.0.0版本开始,字体数据读取相关接口要求系统级poppler依赖版本≥0.89,你当前环境调用的是0.73.0版本的底层poppler库,问题和R包本身的文件无关,手动替换R包文件无法解决。
第一步:定位R实际调用的poppler路径
不同系统定位命令如下,直接在R控制台运行即可:
- Linux系统:
library(pdftools) dll_path <- system.file("libs", .Platform$r_arch, paste0("pdftools", .Platform$dynlib.ext), package = "pdftools") system(paste("ldd", dll_path), intern = TRUE)
返回结果中libpoppler.so对应的绝对路径,就是当前R加载的poppler库位置,0.73版本通常为系统默认源安装的旧版本,路径多在/usr/lib/x86_64-linux-gnu/下。
- macOS系统:把上述命令中的
ldd替换为otool -L即可,其余逻辑一致。 - Windows系统:直接运行
Sys.which("pdfinfo"),返回路径的上级目录就是pdftools调用poppler工具的根目录,若返回路径不是R包pdftools对应目录下的路径,说明PATH优先级被外部旧版poppler抢占。
第二步:分场景修复版本问题
- Linux系统(默认apt/yum源poppler版本过低,Ubuntu18.04默认源恰好为0.73.0版本,是该报错高发场景)
- 先卸载系统旧版poppler开发组件:执行
sudo apt remove libpoppler-cpp-dev libpoppler-dev(CentOS/RHEL对应执行sudo yum remove poppler-cpp-devel poppler-devel) - 源码编译安装≥0.89版本的poppler,安装路径指定为
/usr/local,编译完成后执行sudo ldconfig更新系统动态链接库缓存 - 回到R环境,卸载原有pdftools后从源码重新安装:
remove.packages("pdftools") install.packages("pdftools", type = "source")
- 先卸载系统旧版poppler开发组件:执行
- Windows系统
- 运行
Sys.getenv("PATH")查看环境变量顺序,排查是否有MiKTeX、旧版QPDF、Git for Windows等软件自带的旧版poppler路径排在R库路径前面 - 将pdftools自带的poppler路径(即第一步
Sys.which("pdfinfo")返回值的上级目录)添加到PATH变量最靠前位置,重启R会话即可
- 运行
- Conda虚拟环境运行R
直接在对应conda环境终端执行conda install -c conda-forge poppler>=0.89更新依赖,更新完成后重启R即可,无需重装pdftools。
修复验证
重启R会话后运行如下命令,查看返回的poppler版本:
pdftools::poppler_config()
若返回的version字段≥0.89,即修复完成,字体数据读取接口可正常调用。
内容的提问来源于stack exchange,提问作者varun sharma
相关产品推荐
相关产品推荐

