首页 > 解决方案 > 在没有非 python 依赖的情况下将 PDF 转换为图像

问题描述

我想创建一个可以部署到其他计算机上的 exe。该程序需要能够读取 pdf 并将它们转换为图像,但我不希望其他用户必须下载依赖项。

我的理解是py2image和wand都需要外部依赖,如果你转换成exe,其他用户也需要自己下载依赖。

是否有其他可用选项/解决方法?

标签: pythonpdfpyinstallerwand

解决方案


实际上,我花了一些时间来处理这个问题,但我认为这是值得的。您需要仔细执行所有步骤才能使其正常工作。

  1. 安装pdf2imagepip install pdf2image.
  2. 获取poppler windows 二进制文件。
  3. 创建一个新目录,如myproject.
  4. converter.py在里面创建一个脚本myproject并添加以下代码。
  5. 在里面创建另一个目录myproject并命名它poppler
  6. 将下载的poppler二进制文件夹中的所有文件复制到poppler目录中。尝试测试pdfimages.exe它是否有效。
  7. 利用pyinstaller converter.py -F --add-data "./poppler/*;./poppler" --noupx
  8. 您的可执行文件现已准备就绪。像运行它converter.exe myfile.pdf。结果将在output可执行文件旁边的目录中创建。
  9. 现在您的独立PDF2IMAGE转换器应用程序已准备就绪!

converter.py

import sys
import os
from pdf2image import convert_from_path


def current_path(dir_path):
    if hasattr(sys, '_MEIPASS'):
        return os.path.join(sys._MEIPASS, dir_path)
    return os.path.join(".", dir_path)


if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("PASS your PDF file: \"converter.exe myfile.pdf\"")
        input()
        sys.exit(0)
    os.environ["PATH"] += os.pathsep + \
        os.pathsep.join([current_path("poppler")])

    if not os.path.isdir("./output"):
        os.makedirs("output")
    images = convert_from_path(sys.argv[-1], 500)
    for image, i in zip(images, (range(len(images)))):
        image.save('./output/out{}.png'.format(i), 'PNG')

PS:如果你喜欢,你可以添加一个GUI并为pdf2images.


推荐阅读