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

news2024/12/23 5:06:56

第三方库介绍

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())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2095206.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis基础知识学习笔记(二)

文章目录 一.Redis安装1.Windows 下安装1>资源管理器目录进入2>目录进入命令:3.配置环境变量 2.Linux 下安装1> 安装redis2> 启动redis3> 查看 redis 是否启动 二.Redis配置1. 查看配置2. 编辑配置3. 参数说明 三.Redis数据类型1. String(字符串&…

JVM学习《类加载运行-jvm内存模型》

目录 1.类加载过程 1.1 加载过程详解 1.2 类加载器 2.类加载器和双亲委派机制 3.JVM的内存模型 4.那些是GC Roots的对象有哪些? 1.类加载过程 通过类加载器加载主类到JVM,加载过程可以分为五个主要阶段:加载、验证、准备、解析、初始化。…

PyTorch中使用Transformer对一维序列进行分类的源代码

在PyTorch中使用Transformer对一维序列进行分类是一种常见做法,尤其是在处理时间序列数据、自然语言处理等领域。Transformer模型因其并行化处理能力和自注意力机制而成为许多任务的首选模型。 下面是一个使用PyTorch实现Transformer对一维序列进行分类的完整示例代…

ECC密码与RSA

一、ECC密码(椭圆曲线密码) 1.基本知识 定义: ECC 全称为椭圆曲线加密,EllipseCurve Cryptography,是一种基于椭圆曲线数学的公钥密码。与传统的基于大质数因子分解困难性的加密方法不同,ECC 依赖于解决椭圆…

@antv/x6 要求不显示水平滚动条,并且如果水平方向上显示不全的节点,则要求自动显示全部节点,垂直方向可以出现滚动条来滚动显示所有的节点。

1、要求一共有二个: 要求一:水平滚动条不显示。之前的文章中就已经发表过,可以用Scroller的className来处理。要求二:水平方向上显示全部节点,如果有显示不全的节点(即看不到的节点)要求能够显示…

asp.net实验:数据库写入不成功

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

国庆节微信头像怎么制作?制作国庆国旗节日头像的4个方法

国庆将至,不少朋友的微信头像都换成了渐变红旗头像,是不是觉得超酷呢?如果你也想拥有这样的头像,那就跟着这篇文章一起操作吧! 国庆节前夕,让我们先来了解一下如何制作渐变红旗头像。首先,我们需…

基于Python的Flask框架实战全流程从新建到部署【2】

本项目是基于win10系统运行以及操作的,部署在win7系统。 Flask 是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。 本文是flask框架实战项目,从新建、运行、测试、部署项目…

C/C++的内存分布、动态内存管理等的介绍

文章目录 前言一、C/C的内存分布二、C/C动态内存管理总结 前言 C/C的内存分布、动态内存管理等的介绍 一、C/C的内存分布 因为程序在运行过程中需要存储一些不同的数据,所以需要对内存空间进行分类 二、C/C动态内存管理 C语言动态内存管理是malloc / calloc / rea…

光降解水凝胶:三色光响应

大家好,今天来了解一种三色可见光波长选择性光降解水凝胶生物材料——《Tricolor visible wavelength-selective photodegradable hydrogel biomaterials》发表于《Nature Communications》,其交联剂Rubiq、Rubp和oNB对低能可见光(400 - 617n…

洛科威岩棉板重塑屋面应用,以多重优势成为“优选材料”

屋面作为建筑物的“外衣”,不仅承载着遮风挡雨的基本功能,更在保温隔热、防火安全、防潮隔音等方面发挥着举足轻重的作用。然而,面对极端气候、自然灾害以及日益严苛的环保标准,传统屋面材料逐渐暴露出其局限性,保温效…

JVM垃圾判定算法

垃圾收集技术是Java的一堵高墙。Java堆内存中存放着几乎所有的对象实例,垃圾收集器在对堆内存进行回收前,第一件事情就是要确定这些对象中哪些还存活,哪些已经死去(即不可能再被任何途径使用的对象)。也就是判定垃圾。…

STM32 使用8720 通过LWIP发送数据

一、硬件IOC 1、GPIO 2、NVIC 3、SYS 4、RCC 5、ETH 6、USART 7、LWIP 二、软件函数 1、Main /* USER CODE BEGIN Includes */ #include "ytcesys.h" /* USER CODE END Includes *//* USER CODE BEGIN 2 */ ethreset(); MX_LWIP_Init(); OPEN_USART1…

chunqiude

CVE-2022-28512 靶标介绍: Fantastic Blog (CMS)是一个绝对出色的博客/文章网络内容管理系统。它使您可以轻松地管理您的网站或博客,它为您提供了广泛的功能来定制您的博客以满足您的需求。它具有强大的功能,您无需接触任何代码即可启动并运…

【Java开发】Maven安装配置详细教程

原创文章,不得转载。 文章目录 产生背景用途安装配置本地仓库配置镜像 产生背景 在Java应用程序开发中,随着项目规模的不断扩大和复杂性增加,项目依赖的库、插件和配置文件也变得愈加复杂。传统的项目构建工具(如Ant)…

简单选择排序例题

从上面题目看出,如果排序方法可保证在排序前后排序码相同的相对位置不变,也就是四个选项里,21和21*之间不会交换 简单选择排序方法是:首先在所有记录中找到排序吗最小的记录,把它与第一个记录交换,然后在其…

EXO:模型最终验证的地方;infer_tensor;step;MLXDynamicShardInferenceEngine

目录 EXO:模型最终验证的地方 EXO:infer_tensor EXO:step MXNet的 mx.array 类型是什么 NDArray优化了什么 1. 异步计算和内存优化 2. 高效的数学和线性代数运算 3. 稀疏数据支持 4. 自动化求导 举例说明 EXO:模型最终验证的地方 EXO:infer_tensor 这段代码定…

【科技前沿】用深度强化学习优化电网,让电力调度更聪明!

Hey小伙伴们,今天我要跟大家分享一个超级酷炫的技术应用——深度强化学习在电网优化中的典型案例!如果你对机器学习感兴趣,或是正寻找如何用AI技术解决实际问题的方法,这篇分享绝对不容错过!👩‍&#x1f4…

Pyqt5高级技巧2:Tab顺序、伙伴快捷键、各类常用控件的事件、可移动的卡片式布局(含基础Demo)

目录 一、编辑Tab顺序 二、编辑伙伴 三、设置快捷键(仅MainWindow可用) 四、信号槽 【基本介绍】 【常用信号槽】控件对窗体(拖地) 【常用信号槽】控件对控件 【自定义信号槽】步骤 五、设计文件的转化 六、GUI的运行 1…

【研发日记】吃透新能源充电协议(一)——GB27930实例报文解析

文章目录 前言 背景介绍 充电协议框架 充电握手阶段 充电准备阶段 充电传输阶段 充电结束阶段 错误处理阶段 总结 参考资料 前言 近期在一个嵌入式开发项目中,用到了新能源充电协议,期间在翻阅各种资料文件时,一些地方还是容易理解…