python自动化操作PDF,拆分pdf合并pdf,提取pdf内容

第三方库介绍

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 文件

代码如下:

python 复制代码
'''拆分思路
读取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

比起拆分来,合并的思路更加简单:

确定要合并的 文件顺序

循环追加到一个文件块中

保存成一个新的文件

代码如下:

python 复制代码
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() 这个函数

python 复制代码
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())
相关推荐
SkyWalking中文站19 小时前
认识 Horizon UI · 1/17:SkyWalking 新一代可观测性控制台
运维·前端·监控
雪梨酱QAQ1 天前
Kubeneters HA Cluster部署
运维
江华森1 天前
Spring Cloud 微服务全栈实战:从 Eureka 到 Docker Compose 一文贯通
运维
江华森1 天前
Matplotlib 数据绘图基础入门
运维
江华森1 天前
NumPy 数值计算基础入门
运维
乘云数字DATABUFF5 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--7 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森7 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜8 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB9 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维