代码
【MindSpore易点通】Python在手,PDF不愁

【MindSpore易点通】Python在手,PDF不愁

【MindSpore易点通】Python在手,PDF不愁

宝子们!时隔大半年(实在对不起大家),久违的办公系列又更新啦!之前我们已经给大家种草了利用Python批量处理word和excel文件,今天继续带领家人们学习如何利用Python处理PDF!

废话不多说,我们就开干吧~~

1 库介绍

通过之前的学习,我们其实也可以总结发现,常规的操作基本可以分为:创建PDF、提取PDF中的内容、操作PDF页面的内容等,那么通过这样的操作,我们找到了一堆可以使用的相关库,比如PDFrw 、Python-PDFkit、PDFplumber、PDFtabextract、PDF-redactor等等。

那么既然知道有这些库了(因为它们都不是Python的标准库),因此接下来的工作就是pip install安装各种库文件啦~

这里是小编安装部分库的展示:

pip install PyPDF2

图片1.png

pip insatll PDFplumber

图片2.png

2 常规操作

2.1 文字信息提取

案例:提取test2.PDF文件第2页的文字信息

思路分析:

1.利用PDFplumber打开一个 PDF 文件

2.获取指定的页,或者遍历每一页

3.利用.extract_text()方法提取当前页的文字

示例代码:

import PDFplumber

file_path = r'C:\Users\hangtian\Desktop\test2.PDF'

 

with PDFplumber.open(file_path) as PDF:

    page = PDF.pages[1]

print(page.extract_text())

运行结果:

2.2 批量拆分

案例:将一个完整的 PDF 拆分成几个小的 PDF,由于这里的文件太大,我们只拆分成两个PDF文件。

思路分析:

1.读取PDF的整体信息、总页数等

2.遍历每一页内容,以每个 step 为间隔将PDF存成每一个小的文件块

3.将小的文件块重新保存为新的PDF文件

代码展示:

import os

from PyPDF2 import PDFFileWriter, PDFFileReader

 

def split_PDF(filename, filepath, save_dirpath, step=5):

    """

    拆分PDF为多个小的PDF文件,

    @param filename:文件名

    @param filepath:文件路径

    @param save_dirpath:保存小的PDF的文件路径

    @param step: 每step间隔的页面生成一个文件,例如step=5,表示0-4页、5-9页...为一个文件

    @return:

    """

    if not os.path.exists(save_dirpath):

        os.mkdir(save_dirpath)

    PDF_reader = PDFFileReader(filepath)

    # 读取每一页的数据

    pages = PDF_reader.getNumPages()

    for page in range(0, pages, step):

        PDF_writer = PDFFileWriter()

        # 拆分PDF,每 step 页的拆分为一个文件

        for index in range(page, page+step):

            if index < pages:

                PDF_writer.addPage(PDF_reader.getPage(index))

        # 保存拆分后的小文件

        save_path = os.path.join(save_dirpath, filename+str(int(page/step)+1)+'.PDF')

        print(save_path)

        with open(save_path, "wb") as out:

            PDF_writer.write(out)

 

    print("文件已成功拆分,保存路径为:"+save_dirpath)

   

split_PDF(filename, filepath, save_dirpath, step=5)

通过这个代码逻辑我们也可以明白,写入器初始化和输出的位置一定都在读取PDF循环每一页的循环体内,而不是在循环体外。同理,批量合并的思路更加简单啦——确定要合并的文件顺序、循环追加到一个文件块中、保存成一个新的文件,那么我们批量合并的问题也轻松解决!

2.3 添加水印

案例:将下图作为水印添加到test2.PDF中

思路分析:

1.将需要作为水印的图片插入word中调整合适位置后保存为PDF文件,同时需要额外用到copy模块:

2.把读取器和写入器初始化,并且把水印PDF页先读取好备用。

3.加水印本质上就是把水印PDF页和需要加水印的每一页都合并一遍。由于需要加水印的PDF可能有很多页,而水印PDF只有一页,那么就会造成水印PDF和原始PDF页数不匹配的问题。因此需要把水印PDF页不断复制作为new_page备用,再通过mergePage完成每一页的合并,最后交给写入器统一输出。

当然啦,关于Python处理PDF还有很多别的操作,比如加密PDF文件、html网页自动转为PDF等等,欢迎各位宝子们复现、纠错上述操作,并在小编的基础上大放异彩!本次抽5名宝子赠送MindSpore精美周边一份!