常见库



1 读写文档
python
from pypdf import PdfWriter
PdfWriter是保存pdf文档
writer = PdfWriter()
# A4纸张尺寸,单位pt
writer.add_blank_page(width=595.276, height=841.89)
writer.add_blank_page() #添加一个空白页
with open("test_pdf/test.pdf", "wb") as f: #在test_pdf的文件夹下新建一个test.pdf
writer.write(f)

2 操作界面-合并
把测试文档1.pdf的内容写到空白的test.pdf里
方法一:for循环读取文档的几页写到空白文档
python
# PdfReader是读取pdf文档
# 打开指定路径下的【测试文档1.pdf】,读取PDF文档内容
reader = PdfReader("./test_pdf/测试文档1.pdf")
# reader.pages 是PDF所有页的集合;len()获取页数,打印输出文档总页数
print(len(reader.pages)) #看一下有几页
# 创建PDF写入器对象,用来组装、生成新的PDF文件
writer = PdfWriter()
# 切片 pages[:2] 取**索引0、1**,也就是原文档的前2页;循环遍历这两页
for page in reader.pages[:2]:
# 打印page变量的数据类型,page是pypdf的PageObject页面对象
print(type(page))
# 把读取到的页面,添加到新PDF的写入器中(加入新文档)
writer.add_page(page)
# 将writer中组装好的页面,写入磁盘,生成新文件 test_pdf/test.pdf
# pypdf支持直接传文件路径字符串,内部自动帮你打开、关闭文件
writer.write("test_pdf/test.pdf")
方法二:writer.append("./test_pdf/测试文档1.pdf") #直接.append(指定路径下的文档)
python
from pypdf import PdfReader, PdfWriter
# PdfReader是读取pdf文档
# 打开指定路径下的【测试文档1.pdf】,读取PDF文档内容
reader = PdfReader("./test_pdf/测试文档1.pdf")
# reader.pages 是PDF所有页的集合;len()获取页数,打印输出文档总页数
print(len(reader.pages)) #看一下有几页
# 创建PDF写入器对象,用来组装、生成新的PDF文件
writer = PdfWriter()
writer.append("./test_pdf/测试文档1.pdf") #直接.append(指定路径下的文档)
writer.append("./test_pdf/测试文档2.pdf")
# 将writer中组装好的页面,写入磁盘,生成新文件 test_pdf/test.pdf
# pypdf支持直接传文件路径字符串,内部自动帮你打开、关闭文件
writer.write("test_pdf/test.pdf")

方法三:merge
但是merge已经用writer替代了


3 旋转文档
python
from pypdf import PdfReader, PdfWriter
# 读取源PDF文件
reader = PdfReader("test_pdf/测试文档1.pdf")
# 创建PDF写入对象,用于保存处理后的新pdf
writer = PdfWriter()
# 取出第0页(第一页),这行代码后面循环会覆盖这个page变量,实际没有使用
page = reader.get_page(0)
# 遍历PDF所有页码索引,range返回0,1,2...总页数-1
for i in range(reader.get_num_pages()):
# 判断页码索引是否为偶数:0、2、4......(第1、3、5......实际页面)
if i % 2 == 0:
# 偶数索引页面:顺时针旋转90度
page = reader.get_page(i).rotate(90)
else:
# 奇数索引页面:顺时针旋转-90度(等同于逆时针旋转90度)
page = reader.get_page(i).rotate(-90)
# ⚠️原截图代码缺失这一行!旋转后的page必须add_page加入writer,否则输出空白PDF
writer.add_page(page)
# 打开输出文件,二进制写入模式,保存处理完成的pdf
with open("test_pdf/test.pdf", "wb") as f:
writer.write(f)

参考链接
深度解析:Python中处理PDF的库有很多,我应该选择哪一个? - 知乎