第三方库介绍
Python 操作 PDF 会用到两个库,分别是:PyPDF2 和 pdfplumber。
PyPDF2 可以更好的读取、写入、分割、合并PDF文件;
pdfplumber 可以更好的读取 PDF 文件中内容和提取 PDF 中的表格,主要应用于机器生成的 PDF,而非扫描的PDF文档。
由于这两个库都不是 Python 的标准库,所以在使用之前都需要单独安装,在终端中依次输入如下命令进行安装:
pip install PyPDF2
pip install pdfplumber
安装完成后显示 success 则表示安装成功。
课程准备
资源文件解压后放置D:\自动化 文件夹下,最终资源路径为 D:\自动化\pdf ,内容分布如下图:
为了保证学习的流畅性,请提前创建好相应的文件夹,将资源放置在相应位置。
拆分PDF
将一个完整的 PDF 拆分成几个小的 PDF,因为主要涉及到 PDF 整体的操作,需要用到 PyPDF2 这个库
拆分的大概思路如下:
读取 PDF 的整体信息、总页数等
按照页数每页拆分为一个PDF
将小的文件块重新保存为新的 PDF 文件
代码如下:
'''拆分思路
读取pdf的整体信息,总页数等
按照页数每页拆分为一个pdf
将小的文件快重新保存为新的pdf文件'''
import os.path
from PyPDF2 import PdfReader,PdfWriter
pdf_path = r"D:\自动化\第12讲.pdf"
out_dir = r"D:\自动化\拆分"
if not os.path.exists(out_dir):
os.makedirs(out_dir)
# 获取 PdfFileReader 对象
pdf_reader = PdfReader(pdf_path)
# 获取页面数量
page_count = len(pdf_reader.pages)
for i in range(page_count):
pdf_writer = PdfWriter()
page = pdf_reader.pages[i]
pdf_writer.add_page(page)
out_path = os.path.join(out_dir, f"{i + 1}.pdf")#将页码从 0 开始改为从 1 开始(即 i + 1),以便文件名从 1.pdf 开始更符合常规。
with open(out_path, "wb") as out:
pdf_writer.write(out)
合并PDF
比起拆分来,合并的思路更加简单:
确定要合并的 文件顺序
循环追加到一个文件块中
保存成一个新的文件
代码如下:
from PyPDF2 import PdfReader, PdfWriter
import os
pdf_dir = r"D:\自动化\拆分"
out_path = r"D:\自动化\merge.pdf"
# 列出所有的 PDF 文件
pdf_list = [f for f in os.listdir(pdf_dir) if f.endswith('.pdf')]
print(pdf_list )
pdf_writer = PdfWriter()
# 遍历所有 PDF 文件
for pdf_file in pdf_list:
path = os.path.join(pdf_dir, pdf_file)
pdf_reader = PdfReader(path)
# 遍历 PDF 文件的每一页
for page in pdf_reader.pages:
pdf_writer.add_page(page)
# 将合并后的 PDF 写入到输出文件
with open(out_path, "wb") as out:
pdf_writer.write(out)
代码介绍:
提取文字内容
涉及到具体的 PDF 内容操作需要用到 pdfplumber 这个库
在进行文字提取的时候,主要用到 extract_text() 这个函数
import pdfplumber
pdf_path = r"D:\自动化\道德经.pdf"
with pdfplumber.open(pdf_path) as pdf:#使用 pdfplumber.open 方法打开指定路径的 PDF 文件,并将其赋值给 pdf 变量。with 语句确保文件在操作完成后正确关闭。
# 读取所有内容
for page in pdf.pages:
print(page.extract_text())
# 读取第一页的文字内容
# page = pdf.pages[0]
# print(page.extract_text())