• Python 自动化教程(6) : PDF文件处理


    本篇介绍使用  office 库处理 PDF文件.

     office库简介

         office库是笔者写的python库,用于办公自动化,功能是很强的, 包括:PPT自动生成、PPT转长图、PPT带语音播放、Word自动生成、Excel数据处理、图片处理、视频处理、office文档转为PDF、PDF加解密、加水印等等,都是实用的干货。

    使用方法极简,大多数功能只需一行、两行代码。

     使用PIP 安装office库:

    请在命令行,通过PIP安装:

    pip install jojo-office

    office库的安装名称是 jojo-office

    使用时: import office 即可。

    import office

    六、PDF文件处理

    1,各类office文档转为PDF

    对于 Word, Excel, Power文档,均可存为PDF文件 (office库调用相应Office程序完成,需本机安装有Office)。

    1. import office
    2. # 打开word文件,存为pdf文件
    3. office.open_file("input.docx").save("output.pdf")
    4. # 打开excel文件,存为pdf文件
    5. office.open_file("input.xlsx").save("output2.pdf")
    6. # 打开ppt文件,存为pdf文件
    7. office.open_file("input.pptx").save("output3.pdf")

    2,提取PDF部分页面

    1. import office
    2. # 打开PDF文件
    3. pdf = office.open_file("report.pdf")
    4. # 取得页数
    5. total_pages = len(pdf)
    6. # 需要的页的列表
    7. need_pages = [0, 1]
    8. # 存盘为新文件,只保留需要的页
    9. pdf.save("report_0_1.pdf", pages=need_pages)

    说明:

    1, 调用 save()方法时, pages 参数指定一个页数列表 (第一页为0, ...), 则存盘时只保存指定的页,其他页不要了。

    2, 对pdf对象, len(pdf)  将返回pdf文件的总页数。

    3, office.open_file() 可以打开 .pdf文件, 返回  PDF类的对象。也可以直接调用PDF类打开文件,效果是一样的:

    pdf = office.PDF("report.pdf")

    3,PDF文件加密

    PDF文件支持密码。

    1. # 打开PDF文件, 存盘时加上 password 参数,则存盘pdf文件将有密码保护
    2. office.open_file("report.pdf").save("report_encrypted.pdf", password="123")

    4,PDF文件解密

    1. import office
    2. # 打开已加密的PDF文件时,应加上 password 参数
    3. pdf = office.open_file("report_encrypted.pdf", password="123")\
    4. # 再存盘时,不加 password 参数,则存盘文件将无密码。
    5. pdf.save("report_new.pdf")

    干货: pdf文件的密码不能太简单,否则,他人可以通过暴力破解法轻松获得密码(暴力破解法就是拿一个密码字典,一个一个密码不断去试,直到攻破)。 office库提供了一个 对PDF文件的 guess_password() 的方法,支持密码字典破解。破解程序如下:

    1. import office
    2. # 打开已加密的PDF文件时, 注意:没有password参数
    3. pdf = office.open_file("report_encrypted.pdf")
    4. # 调用 guess_password() 方法,进行密码破解
    5. password = pdf.guess_password()
    6. print('password is', password)

    程序运行结果: password is 123

    可见,弱密码是多么可怕。一个不弱的密码应不少于8个字符,由大小写字母、数字、特殊符号组成,不要用连续数字、字母、生日、手机号码等。

    可以自己写一个密码字典文件(文本文件,每一行是一个密码),调用 guess_password() 时代入字典文件名即可,如下:

    1. # 字典文件是 dict.txt
    2. pdf.guess_password("dict.txt")

    5,PDF文件加水印

    1. import office
    2. # 打开PDF文件
    3. pdf = office.open_file("report.pdf")
    4. # 存盘时,加上 watermark 参数,则存盘文件将有水印文字
    5. pdf.save("report_with_mark.pdf", watermark="商业秘密,注意保管")

    注意:

    1, 加水印功能依赖 reportlab 库, 请先安装

    2, 加水印并不是十分安全的,因为有方法可以去水印 (PS: 不详细讲了).

    6, 提取PDF文件中的文字、表格

    注意: 取pdf文字、表格的功能,依赖 pdfplumber 库,请先安装:  pip install pdfplumber

    1. # 打开PDF文件
    2. pdf = office.open_file("report.pdf")
    3. # 获得PDF文件中的文字
    4. text_list = pdf.text()
    5. print(text_list)
    6. # 获得PDF文件中的表格,返回值是一个列表,每个元素是一个表格(一个表格是一个二维数组)
    7. table_list = pdf.tables()
    8. print(table_list)

    程序运行结果:

    1. 业务发展汇报
    2. 202201
    3. 编制人
    4. ...
    5. [[['城市', '销量', '金额'], ['广州', '20773', '1003'], ['深圳', '32005', '1233.8'], ...

    如果只想取某一页的文字、图标,则代码为:

    1. # 打开PDF文件
    2. pdf = office.open_file("report.pdf")
    3. # 获得第2页中的文字 (注:第1页索引号为0)
    4. text = pdf.pages[1].text()
    5. print(text)
    6. # 获得第2页中的文字
    7. table_list = pdf.pages[1].tables()
    8. print(table_list)

    说明:    pages[index] 可以取得某一页, 再调用  text(),  tables() 

    续篇:

    office库还有其他许多功能,下节课再讲。

    office库还在开发完善中,偶有bug请见谅、或提改进。

    有兴趣深入研究的,可以看office.py的源码。

  • 相关阅读:
    Gradle 出现 Could not resolve gradle
    ASEMI肖特基二极管SS210L参数,SS210L规格,SS210L封装
    20.1CubeMx配置FMC控制SDRAM【W9825G6KH-6】
    Learning Sample Relationship for Exposure Correction 论文阅读笔记
    【C++设计模式】依赖倒转原则
    练[CISCN2019 华东南赛区]Double Secret
    python练习题(markdown中的60道题)
    FormatterRegistry配置应用的格式转换功能
    Python PyQt 程序设置图标
    函数8:高阶函数
  • 原文地址:https://blog.csdn.net/c80486/article/details/126575152