Python PDF处理模块pypdf库详解
概要
PDF(Portable Document Format)是一种常见的文档格式,广泛用于存储和共享文本和图像数据。在 Python 中,有许多库可以用于处理 PDF 文件,其中之一就是 PyPDF。PyPDF 是一个功能强大的库,它允许你读取、创建和操作 PDF 文件。本文将介绍 PyPDF 的基本概念、安装方法以及一些常见的用法示例,以帮助大家开始使用 PyPDF 处理 PDF 文件。
什么是 PyPDF?
PyPDF 是一个用于处理 PDF 文件的 Python 库。它提供了一组工具和功能,用于读取、解析和操作 PDF 文件的内容。
安装 PyPDF
要开始使用 PyPDF,首先需要安装它。可以使用 pip 命令来安装 PyPDF2(PyPDF 的常用版本):
pip install PyPDF2
安装完成后,就可以在 Python 中导入 PyPDF2 模块,并开始处理 PDF 文件。
基本用法示例
1. 读取 PDF 文件内容
使用 PyPDF,可以轻松读取 PDF 文件中的文本内容。
以下是一个示例,演示了如何打开一个 PDF 文件并提取其文本内容:
import PyPDF2# 打开 PDF 文件
pdf_file = open('example.pdf', 'rb')# 创建 PDF 读取器对象
pdf_reader = PyPDF2.PdfFileReader(pdf_file)# 获取 PDF 文件中的页数
num_pages = pdf_reader.numPages# 读取每一页的文本内容
for page_num in range(num_pages):page = pdf_reader.getPage(page_num)text = page.extractText()print(f'Page {page_num + 1}:\n{text}\n')# 关闭 PDF 文件
pdf_file.close()
2. 创建新的 PDF 文件
PyPDF 也可以创建新的 PDF 文件。
以下是一个示例,演示了如何创建一个空白的 PDF 文件并添加一些文本内容:
import PyPDF2# 创建一个新的 PDF 文件
pdf_file = open('new_document.pdf', 'wb')# 创建 PDF 写入器对象
pdf_writer = PyPDF2.PdfFileWriter()# 创建一个 PDF 页
page = PyPDF2.PdfFileReader('blank_page.pdf').getPage(0)# 添加文本到页中
page.mergeTranslatedPage(page, 100, 200)
pdf_writer.addPage(page)# 将写入的内容保存到文件中
pdf_writer.write(pdf_file)# 关闭 PDF 文件
pdf_file.close()
3. 合并多个 PDF 文件
有时候可能需要合并多个 PDF 文件成一个文件。PyPDF 提供了合并 PDF 文件的功能。
以下是一个示例,演示了如何合并两个 PDF 文件:
import PyPDF2# 打开两个 PDF 文件
pdf1 = open('file1.pdf', 'rb')
pdf2 = open('file2.pdf', 'rb')# 创建 PDF 读取器对象
pdf_reader1 = PyPDF2.PdfFileReader(pdf1)
pdf_reader2 = PyPDF2.PdfFileReader(pdf2)# 创建 PDF 写入器对象
pdf_writer = PyPDF2.PdfFileWriter()# 将两个 PDF 文件的页面添加到写入器中
for page_num in range(pdf_reader1.numPages):page = pdf_reader1.getPage(page_num)pdf_writer.addPage(page)for page_num in range(pdf_reader2.numPages):page = pdf_reader2.getPage(page_num)pdf_writer.addPage(page)# 创建一个新的合并后的 PDF 文件
merged_pdf = open('merged.pdf', 'wb')
pdf_writer.write(merged_pdf)# 关闭所有文件
pdf1.close()
pdf2.close()
merged_pdf.close()
更多功能
1. 旋转 PDF 页
有时候,可能需要旋转 PDF 文件中的某些页面,以使其更容易阅读或打印。PyPDF2 可以旋转 PDF 页,可以选择逆时针或顺时针旋转。
以下是一个示例,演示如何旋转一个 PDF 文件中的所有页面:
import PyPDF2# 打开 PDF 文件
pdf_file = open('example.pdf', 'rb')# 创建 PDF 读取器对象
pdf_reader = PyPDF2.PdfFileReader(pdf_file)# 创建 PDF 写入器对象
pdf_writer = PyPDF2.PdfFileWriter()# 逆时针旋转每一页并添加到写入器中
for page_num in range(pdf_reader.numPages):page = pdf_reader.getPage(page_num)page.rotateClockwise(90) # 旋转90度pdf_writer.addPage(page)# 创建一个新的旋转后的 PDF 文件
rotated_pdf = open('rotated.pdf', 'wb')
pdf_writer.write(rotated_pdf)# 关闭所有文件
pdf_file.close()
rotated_pdf.close()
在这个示例中,打开一个 PDF 文件,逆时针旋转了每一页,并将它们添加到一个新的 PDF 文件中,从而实现了页面的旋转。
2. 处理 PDF 表单
PDF 文件中的表单通常包含文本字段、复选框、下拉框等。PyPDF2 可以处理 PDF 表单数据,包括填写表单和提取表单数据。
以下是一个示例,演示如何使用 PyPDF2 处理 PDF 表单:
import PyPDF2# 打开 PDF 文件
pdf_file = open('form.pdf', 'rb')# 创建 PDF 表单对象
pdf_reader = PyPDF2.PdfFileReader(pdf_file)
pdf_writer = PyPDF2.PdfFileWriter()# 填写表单字段
pdf_writer.updatePageFormFieldValues(pdf_reader.getPage(0), {'Name': 'John Doe','Email': 'johndoe@email.com','Country': 'USA'
})# 创建一个新的带有填写后表单的 PDF 文件
filled_form_pdf = open('filled_form.pdf', 'wb')
pdf_writer.write(filled_form_pdf)# 关闭所有文件
pdf_file.close()
filled_form_pdf.close()
在这个示例中,打开一个包含表单的 PDF 文件,然后使用 updatePageFormFieldValues 方法填写表单字段,并将填写后的表单保存为一个新的 PDF 文件。
3. PDF 加密和解密
保护 PDF 文件的机密性是一个重要问题,PyPDF2 可以对 PDF 文件进行加密和解密。
以下是一个示例,演示如何加密和解密 PDF 文件:
加密 PDF 文件
import PyPDF2# 打开 PDF 文件
pdf_file = open('document.pdf', 'rb')# 创建 PDF 写入器对象
pdf_writer = PyPDF2.PdfFileWriter()# 添加需要加密的页面
pdf_writer.addPage(pdf_reader.getPage(0))# 设置密码
pdf_writer.encrypt('mypassword')# 创建一个新的加密 PDF 文件
encrypted_pdf = open('encrypted.pdf', 'wb')
pdf_writer.write(encrypted_pdf)# 关闭所有文件
pdf_file.close()
encrypted_pdf.close()
解密 PDF 文件
import PyPDF2# 打开加密的 PDF 文件
pdf_file = open('encrypted.pdf', 'rb')# 解密 PDF 文件
pdf_reader = PyPDF2.PdfFileReader(pdf_file)
pdf_reader.decrypt('mypassword')# 获取解密后的内容
page = pdf_reader.getPage(0)
text = page.extractText()
print(text)# 关闭文件
pdf_file.close()
在这个示例中,首先加密了一个 PDF 文件,然后使用密码解密了它,以便读取内容。
集成 PyPDF 到工作流程
-
文档处理:用于提取、合并、拆分和转换 PDF 文档,以满足不同的文档需求。
-
报告生成:生成包含图表、表格和文本的 PDF 报告,用于数据分析和可视化。
-
PDF 表单处理:处理 PDF 表单,自动化数据收集和处理流程。
-
文档自动化处理:在自动化任务中使用 PyPDF 来处理 PDF 文件,提高工作效率。
总结
Python PyPDF 是一个功能强大的库,用于处理 PDF 文件。它可以用于读取、创建、合并和转换 PDF 文档,以及执行许多其他与 PDF 有关的任务。希望本文提供的示例代码和介绍有助于大家入门 PyPDF,并在项目中使用它来处理 PDF 文件。
如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!
相关文章:
Python PDF处理模块pypdf库详解
概要 PDF(Portable Document Format)是一种常见的文档格式,广泛用于存储和共享文本和图像数据。在 Python 中,有许多库可以用于处理 PDF 文件,其中之一就是 PyPDF。PyPDF 是一个功能强大的库,它允许你读取…...
C++上位软件通过LibModbus开源库和西门子S7-1200/S7-1500/S7-200 PLC进行ModbusTcp 和ModbusRTU 通信
前言 一直以来上位软件比如C等和西门子等其他品牌PLC之间的数据交换都是大家比较头疼的问题,尤其是C上位软件程序员。传统的方法一般有OPC、Socket 等,直到LibModbus 开源库出现后这种途径对程序袁来说又有了新的选择。 Modbus简介 Modbus特点 1 &#…...
PLSQL Developer 15安装和oracle客户端安装
文章目录 前言一、PLSQL Developer1.下载2.安装 二、oracle客户端1.下载2.环境变量 三、使用1. oci2. 连接3. 配置文件 总结 前言 oracle是经常使用的数据库,PLSQL Developer是众多产品中比较不错的一款工具,接下来我们来介绍PLSQL Developer的安装和使…...
【深度deepin】深度安装,jdk,tomcat,Nginx安装
目录 一 深度 1.1 介绍 1.2 与别的操作系统的优点 二 下载镜像文件及VM安装deepin 三 jdk,tomcat,Nginx安装 3.1 JDK安装 3.2 安装tomcat 3.3 安装nginx 一 深度 1.1 介绍 由深度科技社区开发的开源操作系统,基于Linux内核…...
解决flask启动报错:ImportError: DLL load failed while importing _dukpy: 找不到指定的程序
现象: 原因:dukpy没有win32执行库 解决办法: 到lfd.uci.edu 第三方库下载dukpy的win32 whl文件 注意: 需要跟你python版本和windows平台(32位/64位)对应 https://www.lfd.uci.edu/~gohlke/pythonlibs/#…...
腾讯面试总结
腾讯 一面 mysql索引结构?redis持久化策略?zookeeper节点类型说一下;zookeeper选举机制?zookeeper主节点故障,如何重新选举?syn机制?线程池的核心参数;threadlocal的实现ÿ…...
面向对象进阶(static关键字,继承,方法重写,super,this)
文章目录 面向对象进阶部分学习方法:今日内容教学目标 第一章 复习回顾1.1 如何定义类1.2 如何通过类创建对象1.3 封装1.3.1 封装的步骤1.3.2 封装的步骤实现 1.4 构造方法1.4.1 构造方法的作用1.4.2 构造方法的格式1.4.3 构造方法的应用 1.5 this关键字的作用1.5.1…...
Blazor项目如何调用js文件
以下是来自千问的回答并加以整理:(说一句,文心3.5所给的回答不完善,根本运行不起来,4.0等有钱了试试) 在Blazor项目中引用JavaScript文件(.js)以实现与JavaScript的互操作ÿ…...
Windows11 - Ubuntu 双系统及 ROS、ROS2 安装
系列文章目录 前言 一、Windows11 - Ubuntu 双系统安装 硬件信息: 设备名称 DESKTOP-B62D6KE 处理器 13th Gen Intel(R) Core(TM) i5-13500H 2.60 GHz 机带 RAM 40.0 GB (39.8 GB 可用) 设备 ID 7673EF86-8370-41D0-8831-84926668C05A 产品 ID 00331-10000-0000…...
深度学习(学习记录)
题型:填空题判断题30分、简答题20分、计算题20分、综合题(30分) 综合题(解决实际工程问题,不考实验、不考代码、考思想) 一、深度学习绪论(非重点不做考察) 1、传统机器学习&…...
html5实现好看的个人博客模板源码
文章目录 1.设计来源1.1 主界面1.2 认识我界面1.3 我的文章界面1.4 我的模板界面1.5 文章内容界面 2.结构和源码2.1 目录结构2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/135368653 html5实现好看…...
SpringSecurity深度学习
SpringSecurity简介 spring Security是什么? Spring Security 是一个强大且高度可定制的身份验证和访问控制框架,用于保护基于Spring的应用程序。它是Spring项目的一部分,旨在为企业级系统提供全面的安全性解决方案。 一个简单的授权和校验…...
odoo17 | 用户界面的基本交互
前言 现在我们已经创建了我们的新模型及其 相应的访问权限,是时候了 与用户界面交互。 在本章结束时,我们将创建几个菜单以访问默认列表 和窗体视图。 数据文件 (XML) Odoo在很大程度上是数据驱动的,因此模块定义的…...
Intel 性能监视器之二
全文来自Intel开发者手册:Intel? 64 and IA-32 Architectures Software Developer’s Manual Volume 3B System Programming Guide.pdf 注意:下文中已经指出手册中的对应页面和章节,请对照手册原文看,任何个人理解错误ÿ…...
Vert.x学习笔记-什么是事件总线
广义事件总线介绍Vert.x的事件总线Vert.x的事件总线的实现方式Vert.x的事件总线通信模式事件总线与消息队列的区别点对点通信模式请求-应答通信模式发布-订阅通信模式 Vert.x的事件总线应用场景Vert.x的事件总线消息Vert.x的事件总线消息示例Vert.x的事件总线的消息类型 拓展 广…...
STM32学习笔记二十二:WS2812制作像素游戏屏-飞行射击游戏(12)总结
至此,飞行射击游戏已经基本实现该有的功能,已经比较接近早期的商业游戏了。 如果采用脚本,可以完成关卡游戏,如果不用,也可以做成无限挑战游戏。 我们汇总一下制作的过程: 1、建模UML 2、主循环处理过程…...
astadmin安装querylist插件Puppeteer
我本来是想在linux服务器上安装,折腾了一天也没安装成功,由于急着用,就先做window10上安装了,以后有时间再研究centos7上安装 一 首先需要安装fastadmin 框架和querylist插件 这个大家可以自行安装,querylist安装地址…...
Python从入门到网络爬虫(MySQL链接)
前言 在实际数据分析和建模过程中,我们通常需要从数据库中读取数据,并将其转化为 Pandas dataframe 对象进行进一步处理。而 MySQL 数据库是最常用的关系型数据库之一,因此在 Python 中如何连接 MySQL 数据库并查询数据成为了一个重要的问题…...
2020年认证杯SPSSPRO杯数学建模A题(第二阶段)听音辨位全过程文档及程序
2020年认证杯SPSSPRO杯数学建模 A题 听音辨位 原题再现: 把若干 (⩾ 1) 支同样型号的麦克风固定安装在一个刚性的枝形架子上 (架子下面带万向轮,在平地上可以被水平推动或旋转,但不会歪斜),这样的设备称为一个麦克风树。不同的麦…...
深入理解CRON表达式:时间调度的艺术
😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…...
保姆级教程:在Spring Boot项目里正确配置Hutool和BouncyCastle搞定SM4国密加密
Spring Boot项目集成SM4国密加密全流程实战指南 在金融、政务等对数据安全要求严格的领域,国密算法正逐步取代国际通用加密标准成为首选方案。作为国内广泛使用的SM4分组密码算法,其128位分组长度和128/192/256位密钥长度设计,在保证安全性的…...
30ms低延迟投屏终极指南:用QtScrcpy实现专业级手游直播
30ms低延迟投屏终极指南:用QtScrcpy实现专业级手游直播 【免费下载链接】QtScrcpy Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScrcpy…...
DayZ社区离线模式完全指南:打造你的专属末日沙盒世界
DayZ社区离线模式完全指南:打造你的专属末日沙盒世界 【免费下载链接】DayZCommunityOfflineMode A community made offline mod for DayZ Standalone 项目地址: https://gitcode.com/gh_mirrors/da/DayZCommunityOfflineMode 想在DayZ中完全掌控自己的生存命…...
别再傻傻分不清了!一张图看懂CRT、PEM、PFX、P7B证书格式的区别与应用场景
数字证书格式全解析:CRT、PEM、PFX、P7B的核心差异与实战选择 当你第一次在服务器上配置SSL证书时,面对CRT、PEM、PFX、P7B这些后缀名,是不是感觉像在解密码?上周我帮一个创业团队迁移服务器,他们的CTO拿着五个不同格式…...
Rust命令行工具开发实战:从架构设计到工程化发布
1. 项目概述:为什么是Rust,为什么是命令行工具?最近几年,如果你关注过系统编程或者高性能工具领域,Rust这个词出现的频率会越来越高。它不再是一个“未来之星”,而是实实在在地在重塑我们手中的工具链。我自…...
GraphQL-WS vs 传统GraphQL:为什么WebSocket是实时应用的首选
GraphQL-WS vs 传统GraphQL:为什么WebSocket是实时应用的首选 【免费下载链接】graphql-ws Coherent, zero-dependency, lazy, simple, GraphQL over WebSocket Protocol compliant server and client. 项目地址: https://gitcode.com/gh_mirrors/gr/graphql-ws …...
TI毫米波雷达IWR/AWR1642 L3 RAM内存优化实战:从原理到配置
1. 项目概述:为何要动L3 RAM这块“蛋糕”?如果你正在基于TI的IWR1642或AWR1642毫米波雷达芯片进行开发,尤其是当你的应用代码量越来越大,或者数据处理任务越来越重时,你可能会遇到一个瓶颈:内存不够用了。不…...
3步重构你的设计到动画工作流:从Figma到After Effects的无缝转换
3步重构你的设计到动画工作流:从Figma到After Effects的无缝转换 【免费下载链接】AEUX Editable After Effects layers from Sketch artboards 项目地址: https://gitcode.com/gh_mirrors/ae/AEUX 你是否曾为设计到动画的转换过程感到头疼?在Fig…...
电商网站滑块验证码破解:OpenCV图像识别+轨迹模拟方案
一、前言当前主流电商、会员登录、抢购下单、接口风控场景中,滑块拼图验证码已是最常见的人机校验方式。传统简单爬虫直接请求接口极易被拦截,而滑块验证码核心防护逻辑分为两点:一是缺口位置图像匹配校验,二是人为滑动轨迹行为风…...
让经典游戏在现代Windows系统上流畅运行:DDrawCompat兼容性解决方案
让经典游戏在现代Windows系统上流畅运行:DDrawCompat兼容性解决方案 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirr…...
