Pdf2Image库无法读取使用DocuSign签署的PDF。
Pdf2Image库无法读取使用DocuSign签署的PDF。
我正在尝试将使用DocuSign签名的PDF转换为图像格式。我们在convert_from_path方法中遇到了错误。代码和错误如下所示:
import pdf2image data=pdf2image.convert_from_path('name.pdf') PDFPageCountError: 无法获取页数。 语法错误:xref表中的Gen过大(大于INT_MAX) 语法错误:找不到尾部字典 语法错误:无效的XRef条目 语法错误:无效的XRef条目 语法错误:顶级页面对象类型错误(null) 命令行错误:给定的页面范围有误:第一页(1)不能在最后一页(0)之后。
问题:使用DocuSign签署的PDF,Pdf2Image库无法读取。
原因:问题与较旧版本的poppler有关。升级到最新版本(21.03.0)可以解决问题。
解决方法:对于CentOS8系统,已经有20.11.0版本的poppler,这已足够修复问题。对于Ubuntu 20.04系统,升级poppler可能会比较困难,但参考我刚写的指导,应该能够轻松解决。
另外,如果在本地运行时使用了convert_from_bytes方法而正常工作,但在Docker容器中运行脚本时出现相同错误,可能是由于Docker容器中没有安装Poppler。可以尝试在poetry环境中添加Poppler。
Pdf2Image库无法读取使用DocuSign签名的PDF文件的问题可能是由于Poppler版本过低导致的。为了解决这个问题,可以按照以下步骤安装/升级到最新版本的Poppler/pdftoppm(本文撰写时的版本为22.11.0):
1. 首先,尝试从最新的Linux Ubuntu发行版中安装:
# 检查当前版本 pdftoppm -v # 尝试更新 sudo apt update sudo apt install poppler-utils # 再次检查当前版本 pdftoppm -v # 现在再次运行`pdftoppm`命令将PDF转换为一系列TIF文件,例如: pdftoppm "My PDF Password" -tiff -r 300 "in.pdf" "path/to/output/dir" # 或者(如果PDF没有密码): pdftoppm -tiff -r 300 "in.pdf" "path/to/output/dir" # 如果可以正常工作,问题解决!否则,通过从源代码构建来升级poppler,如下所示。
2. 从源代码安装以获取最新版本的poppler和pdftoppm:
- 下载源代码:
pdftoppm -v wget https://poppler.freedesktop.org/poppler-22.11.0.tar.xz tar -xf poppler-22.11.0.tar.xz cd poppler-22.11.0 mkdir -p build cd build git clone git://git.freedesktop.org/git/poppler/test
- 安装依赖项:
sudo apt update sudo apt install \ libfreetype-dev \ libfontconfig-dev \ libboost-dev \ libpng-dev \ zlib1g-dev \ liblcms2-dev \ libcurl4 \ libcurl4-gnutls-dev sudo apt install \ libjpeg-dev \ libcairo-dev \ libopenjp2-7-dev \ libtiff-dev \ libcurl4-gnutls-dev \ libnss3-dev sudo apt install aptitude sudo aptitude install libjpeg-dev sudo aptitude install libcairo-dev sudo aptitude install libopenjp2-7-dev sudo aptitude install libtiff-dev sudo aptitude install libcurl4-gnutls-dev sudo aptitude install libnss3-dev
- 构建并安装poppler:
cmake -DTESTDATADRIR=./test -DCMAKE_INSTALL_MANDIR:PATH=/usr/local/share/man .. time make sudo make install . ~/.bashrc sudo ldconfig $(which pdftoppm) pdftoppm -v pdftoppm "My Optional PDF Password" -tiff -r 300 "in.pdf" "path/to/output/dir" pdftoppm -tiff -r 300 "in.pdf" "path/to/output/dir"
通过按照上述步骤进行操作,应该能够解决Pdf2Image库无法读取使用DocuSign签名的PDF文件的问题。如果在构建过程中遇到资源不足的问题,可以尝试增加虚拟内存的大小。