如何让pdf2image支持含中文字符路径的PDF文件?
解决pdf2image处理含中文字符路径PDF的问题
问题描述
运行以下代码转换含中文路径的PDF为图片时:
from pdf2image import convert_from_path images = convert_from_path('含中文字符的路径/中文文件名.pdf', 500) # 保存图片
出现错误:
PDFPageCountError: Unable to get page count. I/O Error: Couldn't open file '含中文字符的路径/??????.pdf': No such file or directory.
中文字符被替换为?,仅路径含中文时触发问题,无中文路径时程序正常。修改pdf2image.py中pdfinfo_from_path函数的解码方式(将out.decode("utf8", "ignore")改为out.decode("utf32", "ignore"))无效,且通过conda install -c conda-forge poppler安装依赖时速度极慢。
解决方案
1. 加速poppler安装
使用国内conda镜像源提升安装速度,先执行以下命令配置镜像:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --set show_channel_urls yes
再执行安装命令:
conda install -c conda-forge poppler
2. 修复中文路径编码问题
修改pdf2image的底层调用逻辑,确保命令行能正确传递中文路径:
找到pdf2image.py中pdfinfo_from_path函数里的subprocess.Popen调用,将其修改为:
proc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='utf-8')
同时去掉后续的out.decode()步骤,直接读取字符串输出。
3. 绕开中文路径问题:临时文件中转
将含中文路径的PDF复制到无中文的临时路径下处理,完成后清理临时文件:
import shutil import os from pdf2image import convert_from_path original_pdf = '含中文字符的路径/中文文件名.pdf' temp_pdf = 'temp.pdf' # 复制到临时路径 shutil.copy(original_pdf, temp_pdf) # 执行转换 images = convert_from_path(temp_pdf, 500) # 保存图片 for idx, img in enumerate(images): img.save(f'转换后的页面_{idx+1}.png') # 删除临时文件 os.remove(temp_pdf)
4. 替代方案:使用PyMuPDF库
PyMuPDF(fitz)对中文路径支持友好,无需依赖poppler,安装和使用更简便:
import fitz # 打开PDF文件 doc = fitz.open('含中文字符的路径/中文文件名.pdf') # 逐页转换为图片 for page_num in range(len(doc)): page = doc.load_page(page_num) # 设置DPI为500 pix = page.get_pixmap(dpi=500) # 保存图片 pix.save(f'页面_{page_num+1}.png')
安装命令:
pip install pymupdf
内容的提问来源于stack exchange,提问作者Aqqqq
相关产品推荐
相关产品推荐

