PyPDF2 is a free and open-source pure-python PDF library capable of splitting, merging, cropping, and transforming the pages of PDF files. It can also add custom data, viewing options, and passwords to PDF files. PyPDF2 can retrieve text and metadata from PDFs as well.
PyPDF2是一个++免费的、开源的++纯python PDF库,能够拆分、合并、裁剪和转换PDF文件的页面。它还可以为PDF文件添加自定义数据、查看选项和密码。PyPDF2也可以从pdf中检索文本和元数据。
一、安装方法和GitHub地址
安装方法:
> pip install PyPDF2
GitHub地址:
https://github.com/py-pdf/pypdf
二、实例
以下面两个文件为示例,进行几个简单的编辑操作。
file1.pdf | file2.pdf |
---|---|
![]() | ![]() |
2.1 拆分
实例目的:
将file1.pdf的第2和第4页拆分为一个单独的文件。
file1.pdf | 拆分 | output.pdf |
---|---|---|
![]() | ![]() | ![]() |
为了方便输入文件地址,可以将要处理的文件与Python程序文件放到同一文件夹下。
实现代码:
# main.py
# 引入PdfWriter类
from PyPDF2 import PdfWriter
# 新建实例
pdfWriter = PdfWriter()
# 引入PDF文件页面
# - fileobj为PDF文件,同一文件夹下可以直接使用文件名
# - pages为页面编号,从0记起,因此这里是1和3,对应页码2和4
pdfWriter.append(fileobj='file1.pdf', pages=[1,3])
# 由于fileobj是第一个输入参数,上行也可以简写如下:
# pdfWriter.append('file1.pdf', pages=[1,3])
# 保存文件
pdfWriter.write('output.pdf')
# 清除缓存
pdfWriter.close()
2.2 合并
实例目的:
将file1.pdf的前3页和file2.pdf的前3页合并为一个单独的文件。
file1.pdf | file2.pdf | 合并 | output.pdf |
---|---|---|---|
![]() | ![]() | ![]() | ![]() |
实现代码1:
from PyPDF2 import PdfWriter
pdfWriter = PdfWriter()
pdfWriter.append('file1.pdf', pages=[0,1,2])
# 按页面对应编号将另一个文件的页面也添加到writer实例中
pdfWriter.append('file2.pdf', pages=[3,4,5])
pdfWriter.write('output.pdf')
pdfWriter.close()
PageRange类
对于连续多个页面可以采用PageRange替代 [0,1,2] 的写法。
写法 | 含义 | 写法 | 含义 |
---|---|---|---|
: | 所有页 | -1 | 最后1页 |
2 | 第3页 | :-1 | 除了最后1页 |
0:3 | 前3页 | -2 | 倒数第2页 |
:3 | 前3页 | -2: | 最后2页 |
5: | 第6页往后 | -3:-1 | 倒数第3、第2和最后1页 |
::2 | 第1 3 5 … 页 | 3:0:-1 | 第4 3 2页 |
1:10:2 | 第2 4 6 8 10页 | 2::-1 | 第3 2 1页 |
::-1 | 所有页反序 |
实现代码2:
from PyPDF2 import PdfWriter
pdfWriter = PdfWriter()
# 修改如下:
pdfWriter.append('file1.pdf', pages=PageRange(':3'))
pdfWriter.append('file2.pdf', pages=PageRange('-3:'))
pdfWriter.write('output.pdf')
pdfWriter.close()
2.3 整理
即修改页面顺序。
file1.pdf | 整理 | output.pdf |
---|---|---|
![]() | ![]() | ![]() |
实例目的:
将file1.pdf的页面顺序进行调整。
实现代码:
from PyPDF2 import PdfWriter
pdfWriter = PdfWriter()
# 按顺序输入对应的页面编号
pdfWriter.append('file1.pdf', pages=[1,3,2,0,5,4])
pdfWriter.write('output.pdf')
pdfWriter.close()
2.4 加解密(已知密码)
实例目的:
对file1.pdf进行加密,对加密后的文件进行解密。
实现代码:
from PyPDF2 import PdfWriter, PdfReader
pdfWriter1 = PdfWriter()
pdfWriter1.append('file1.pdf')
# 加密
pdfWriter1.encrypt('123456')
pdfWriter1.write('lock.pdf')
pdfWriter1.close()
pdfReader = PdfReader('lock.pdf')
# 解密
if pdfReader.is_encrypted:
pdfReader.decrypt('123456')
pdfWriter2 = PdfWriter()
pdfWriter2.append(pdfReader)
pdfWriter2.write('unlock.pdf')
pdfWriter2.close()