【python】PyPDF2操作pdf

ops/2025/3/3 4:44:29/

PyPDF2是一个用于处理PDF文件的Python库,可以读取、合并、拆分、裁剪和修改PDF文件。以下是一些使用PyPDF2的基本示例,包括如何安装该库以及执行一些常见的PDF操作。

安装PyPDF2

首先,你需要安装PyPDF2库。你可以使用pip来安装它:

pip install PyPDF2

读取PDF文件

读取PDF文件并打印其页数:

python">import PyPDF2# 使用PyPDF2读取pdf文件
if __name__ == '__main__':# 打开 PDF 文件with open('example.pdf', 'rb') as file:# 创建一个 PDF 阅读器对象reader = PyPDF2.PdfReader(file)# 打印 PDF 文件中的页数print(f'Number of pages: {len(reader.pages)}')

提取文本

从PDF文件中提取文本:

python">import PyPDF2# 使用PyPDF2读取pdf文本
if __name__ == '__main__':# 打开 PDF 文件with open('example.pdf', 'rb') as file:# 创建一个 PDF 阅读器对象reader = PyPDF2.PdfReader(file)# 提取第一页的文本page = reader.pages[0]text = page.extract_text()print(text)

拆分PDF文件

将PDF文件拆分为两个文件,一个文件包含奇数页,一个文件包含偶数页:

python">import PyPDF2# 使用PyPDF2将PDF文件拆分为两个文件,一个文件包含奇数页,一个文件包含偶数页:
if __name__ == '__main__':# 创建一个 PDF 写入器对象odd_writer = PyPDF2.PdfWriter()even_writer = PyPDF2.PdfWriter()# 打开要拆分的 PDF 文件with open('example.pdf', 'rb') as file:reader = PyPDF2.PdfReader(file)page_num = 0for page in reader.pages:# print(page_num)if page_num % 2 == 0:# print(reader.pages[page_num])odd_writer.add_page(page)else:even_writer.add_page(page)page_num = page_num+1# 将拆分后的 PDF 写入到一个新文件with open('example1.pdf', 'wb') as output_pdf:odd_writer.write(output_pdf)# 将拆分后的 PDF 写入到一个新文件with open('example2.pdf', 'wb') as output_pdf:even_writer.write(output_pdf)

合并PDF文件

你可以将多个PDF文件合并为一个:

python">import PyPDF2# 使用PyPDF2合并两个pdf文件
if __name__ == '__main__':# 打开要合并的 PDF 文件pdf_files = ['example1.pdf', 'example2.pdf']# 创建一个 PDF 写入器对象merger = PyPDF2.PdfMerger()for pdf_file in pdf_files:merger.append(pdf_file)# 将合并后的 PDF 写入到一个新文件with open('merged.pdf', 'wb') as output_pdf:merger.write(output_pdf)

裁剪PDF页面

PyPDF2并不直接支持裁剪页面,但你可以通过提取页面的部分内容并创建一个新的页面来实现这一功能。以下是一个简单的示例,演示如何裁剪页面的上半部分:

python">import PyPDF2# 使用PyPDF2裁剪PDF页面,通过提取页面的部分内容并创建一个新的页面来实现这一功能
if __name__ == '__main__':# 打开 PDF 文件with open('example.pdf', 'rb') as file:reader = PyPDF2.PdfReader(file)# 创建一个 PDF 写入器对象writer = PyPDF2.PdfWriter()# 获取第一页page = reader.pages[0]# 定义裁剪区域(左下角和右上角的坐标)# 表示裁剪区域的左下角和右上角坐标cropbox = page.cropboxx_lower_left = cropbox.lower_left[0]y_lower_left = cropbox.lower_left[1] + (cropbox.upper_right[1] - cropbox.lower_left[1]) / 2x_upper_right = cropbox.upper_right[0]y_upper_right = cropbox.upper_right[1]# 设置裁剪区域(左下x, 左下y, 右上x, 右上y)page.cropbox.lower_left = (x_lower_left, y_lower_left)page.cropbox.upper_right = (x_upper_right, y_upper_right)writer.add_page(page)# 将裁剪后的 PDF 写入到一个新文件with open('cropped_example.pdf', 'wb') as output_pdf:writer.write(output_pdf)

加密PDF

python">from PyPDF2 import PdfWriter
from PyPDF2 import PdfReader# 使用PyPDF2加密pdf
if __name__ == '__main__':writer = PdfWriter()with open('example.pdf', 'rb') as file:reader = PdfReader(file)writer.add_page(reader.pages[0])# 设置加密(128位 AES)writer.encrypt(user_password="password123",owner_password=None,use_128bit=True)with open("encrypted.pdf", "wb") as out_file:writer.write(out_file)

http://www.ppmy.cn/ops/162684.html

相关文章

清华DeepSeek系列PDF全五弹推文的主要内容如下:

资源链接:https://pan.quark.cn/s/3d4088555ca0 资源链接:https://pan.quark.cn/s/df8ce3ea6f4e 「DeepSeek 资料大全」资源链接:https://pan.quark.cn/s/1352425b0645 「完整版 Dee...键整合包」链接:https://pan.quark.cn/s/…

将QT移植到RK3568开发板

文章目录 前言一、获取SDK1. 安装依赖2. 获取SDK资源包3. SDK工程目录介绍4. 获取补丁包 二、编译固件1. 选择板级配置文件2. 编译3. 打包固件4. 配置 Qt5 支持5. 烧写镜像 三、Linux中下载QT1. 安装 Qtcreator2. 创建第一个程序3. 配置 QtCreator 开发环境(1&#…

借助naudio 进行编辑VB.NET

好吧,有好多软件可以实现; 好久前了,忘得 Naudio 使用 下载NAUDIO Imports NAudio.Wave录音 1.设置绘冲区大小 BufferMilliseconds 设置缓冲区大小 缓冲区太小,绘冲区太大,导致 声音断开或是重复过快wav.BufferMillis…

ffmpeg avformat_open_input的作用

1. avformat_open_input 的作用 avformat_open_input 是 FFmpeg 中用于打开输入文件或输入设备的函数。它的主要作用是初始化输入文件或设备的上下文(AVFormatContext),并准备好从输入源读取数据。 2. avformat_open_input 的功能 打开输入文…

docker创建nginx

docker run -d -p 8080:80 --name my-nginx-container nginx docker:命令 run:命令 -d:在后台运行容器 -p:8080:80:将容器内部的80端口映射到宿主机的8080端口。 --name my-nginx-container:为容器指定一个…

高防IP能够给网站带来哪些好处?

随着网络攻击的复杂性和频繁攻击,企业需要保障自身网站和数据信息的安全性,确保业务可以持续稳定的运行,高防IP作为一种网络安全服务,可以帮助企业抵御一定的网络攻击,那么高防IP能够给网站带来哪些好处呢?…

ORM Bee V2.5.2.x 发布,支持 CQRS; sql 性能分析;更新 MongoDB ORM分片

Bee, 一个具有分片功能的 ORM 框架. Bee Hibernate/MyBatis plus Sharding JDBC Jpa Spring data GraphQL App ORM (Android, 鸿蒙) 小巧玲珑!仅 940K, 还不到 1M, 但却是功能强大! V2.5.2 (2025・LTS 版) 开发中... **2.5.2.1 新年 ** 支持 Mong…

INT202 Complexity of Algroithms 算法的复杂度

文章目录 1. 前言1.1 算法(Algorithms)和数据结构(Data Structure)1.2 什么是好的算法?1.3 算法分析1.3.1 实验分析(Experimental Analysis)1.3.2 理论分析1.3.2.1 伪代码(Pseudo-co…