乐于分享
好东西不私藏

使用python3实现PDF转图片

使用python3实现PDF转图片
一、环境和准备工作

安装Python3

我们来说明Windows电脑中如何安装。

打开 WEB 浏览器访问 https://www.python.org/downloads/windows/ ,页面截图如下:

上面截图显示,当前的最新版本(Stable Releases)是 Python 3.12.1 - Dec. 8, 2023

然后直接下载其中的 Download Windows installer (64-bit)安装包。下载好以后,和普通软件一样,进行安装即可。

在安装过程中,你会遇到类似下面的界面:

此时,一定要记得勾选类似 Add Python 3.6 to PATH 的选项哦,这非常重要。

安装依赖包

对于Windows电脑,直接打开CMD窗口:

然后在窗口输入下面命令并回车:

pip3 install -i https://mirrors.aliyun.com/pypi/simple/ py3office
运行效果大致如下:
如果后续的一些功能运行出错了,可能是py3office版本过低,可以运行下面命令进行升级即可:
pip3 install -i https://mirrors.aliyun.com/pypi/simple/ --upgrade py3office

编辑&运行

新建一个文本文件,取名index.py并输入如下内容:

#!/usr/bin/python3# coding=utf-8print("你好呀!")

实际截图如下:

然后在命令行输入下面命令运行:
 python3 ./index.py
运行效果如下:

可以看见,命令行打印了“你好呀!”几个字。

至此,环境就准备好了。

二、PDF转图片

单个文件

直接转图片

比如我们有一个pdf文件:demo.pdf,希望转成图片:

#!/usr/bin/python3
# coding=utf-8

from py3office import pdf

pdf.toImage("./demo.pdf", "./")

运行之后,就可以看见当前目录下多了一张图片:demo.jpg。

修改图片名称

那如果想自定义生成后的图片名称怎么办?比如图片名称希望是picture.jpg,修改代码为:

#!/usr/bin/python3
# coding=utf-8

from py3office import pdf

def getName(name, texts, index, total):
    return "picture"
pdf.toImage("./demo.pdf", "./", getName)

根据pdf内容确定图片名称

有时候,我们图片的名称可能希望根据pdf中的内容进行确定,比如pdf截图如下:

修改一下代码如下,打印一下当前pdf中的内容:

#!/usr/bin/python3
# coding=utf-8

from py3office import pdf
from py3office import handler

def getName(name, texts, index, total):
    handler.printList(texts)
    return "picture"
pdf.toImage("./demo.pdf", "./", getName)

打印结果如下:

[0] 介绍
[1] 你可以用来干什么?
[2] VISLite 贡献指南
[3] 你可以用来干什么?
[4] 顾名思义,这是一个轻量级的数据可视化资源库,所以,我们的目
[5] 标是:帮助你更快速、简单、高效的开发出任意的可视化业务产品。
[6] 当然,这并不是一件非常容易的事情,但我们会逐步完善和改进。
[7] 常用的算法
[8] 我们通过提供可视化常用的算法来帮助你绘制复杂图表。比如下面
......

比如我们想取[2] VISLite 贡献指南为图片名称,那么代码就变成了:

#!/usr/bin/python3
# coding=utf-8

from py3office import pdf
from py3office import handler

def getName(name, texts, index, total):
    return texts[2]
pdf.toImage("./demo.pdf", "./", getName)

这样,pdf就被转成了图片:VISLite 贡献指南.jpg。

批量处理

比如当前目录下有一个文件夹pdf,里面有很多pdf文件,目录结构如下:

- pdf
    - 身份证(正面).pdf
    - 身份证(正面).pdf
    - 银行卡
        - 中国银行卡.pdf

我们希望把其中的所有pdf都变成图片(保持原来的目录结构):

#!/usr/bin/python3
# coding=utf-8

from py3office import pdf
from py3office import handler

sourcePath = "./pdf"
targetPath = "./image"

def doit(fileInfo):
    if fileInfo["path"].endswith(".pdf"):

        def getName(name, texts, index, total):
            return name

        pdf.toImage(
            fileInfo["path"],
            fileInfo["folder"].replace(sourcePath, targetPath),
            getName,
        )


handler.listFile(sourcePath, doit)

运行后会在当前目录多一个文件夹image,目录结构如下:

- image
    - 身份证(正面).jpg
    - 身份证(正面).jpg
    - 银行卡
        - 中国银行卡.jpg
温馨提示:对于单个文件中对图片名称的说明,这里类似的直接修改getName返回值也是可行的。