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())
相关推荐
x-cmd8 分钟前
[250430] Kali Linux 存储库密钥丢失导致所有用户无法正常更新 APT
linux·运维·服务器·kali linux
一刀到底2111 小时前
从实列中学习linux shell6: 写一个 shell 脚本 过滤 恶意ip 攻击
linux·运维·shell
神奇侠20241 小时前
基于tabula对pdf中多个excel进行识别并转换成word中的优化(五)
python·pdf·tabula
诗雅颂1 小时前
DrissionPage采集京东系列——自动化登录
运维·自动化
pengdott1 小时前
HAproxy+keepalived+tomcat部署高可用负载均衡实践
linux·运维·服务器·tomcat·负载均衡
自由鬼1 小时前
深海科技服务博客简介
运维·网络·人工智能·程序人生·安全威胁分析·个人开发·数据安全
前端熊猫2 小时前
玩转Nginx
运维·nginx
Vicssic2 小时前
【Linux 网络】网络工具ifconfig和iproute/iproute2工具详解
linux·运维·网络
motosheep3 小时前
关于安卓自动化打包docker+jenkins实现
android·docker·自动化
Galeoto3 小时前
how to install linux perf through deb file
linux·运维·服务器