python - 在没有非 python 依赖的情况下将 PDF 转换为图像
问题描述
我想创建一个可以部署到其他计算机上的 exe。该程序需要能够读取 pdf 并将它们转换为图像,但我不希望其他用户必须下载依赖项。
我的理解是py2image和wand都需要外部依赖,如果你转换成exe,其他用户也需要自己下载依赖。
是否有其他可用选项/解决方法?
解决方案
实际上,我花了一些时间来处理这个问题,但我认为这是值得的。您需要仔细执行所有步骤才能使其正常工作。
- 安装pdf2image与
pip install pdf2image
. - 获取poppler windows 二进制文件。
- 创建一个新目录,如
myproject
. converter.py
在里面创建一个脚本myproject
并添加以下代码。- 在里面创建另一个目录
myproject
并命名它poppler
。 - 将下载的poppler二进制文件夹中的所有文件复制到
poppler
目录中。尝试测试pdfimages.exe
它是否有效。 - 利用
pyinstaller converter.py -F --add-data "./poppler/*;./poppler" --noupx
- 您的可执行文件现已准备就绪。像运行它
converter.exe myfile.pdf
。结果将在output
可执行文件旁边的目录中创建。 - 现在您的独立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
.
推荐阅读
- c# - 继承从 .NET Framework 到 .NET Standard 实现 IValidatableObject 的类
- python - 根据值计数列删除已排序的行
- php - TABLE 的 SQL 视图和条件记录 COUNT
- rust - 用逗号分隔 Vec 中的元素
- javascript - document.create 没有加载脚本,没有请求 JS 文件
- permissions - Colab:谷歌驱动文件流访问权限很麻烦。有没有更好的办法?
- c - qemu:未捕获的目标信号 11(分段错误) - 尝试返回结构时核心转储
- postgresql - 如何循环json数据并计算postgres中的值
- python - 使用多项式回归时如何解释从“LinearRegression().coef_”返回的系数
- python - 如何在单个 vhost 上服务 django 和 gatsby?