python——pdf编辑

常见库

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的库有很多,我应该选择哪一个? - 知乎

Python 操作 PDF 文档:主流库选型指南 - E-iceblue - 博客园

07.提取内容_哔哩哔哩_bilibili

相关推荐
yi0112 分钟前
DAY27: LeetCode 110. 平衡二叉树 | 在递归中判断是否平衡
人工智能·笔记·python·算法·leetcode·二叉树·递归
狂师3 分钟前
爆火!新一代e2e AI测试框架,单日狂揽1500 star
前端·人工智能·测试
恋猫de小郭24 分钟前
Flitz ,一个把 Flutter 玩成热插拔 Preview 的有趣项目,不错的思路
android·前端·flutter
闭包不眠26 分钟前
Word转HTML后体积不对,裁掉的截图原图还在
前端·图像处理·人工智能·计算机视觉·html·word
言乐633 分钟前
PythonLOLM自动生成复盘报告模型
开发语言·前端·数据库·人工智能·python
水水不水啊38 分钟前
告别切换N个窗口调试:我用 Python + WebView 做了款现代化串口助手(含 TCP/UDP、波形、协议解析)
python·tcp/ip·udp
论文复现现场40 分钟前
DeepSeek V4.1 Flash 各平台价格怎么比?缓存、峰谷计费与 Python 成本计算
开发语言·python·缓存·大模型·成本优化·deepseek
tryCbest44 分钟前
第二篇:CSS3 全部知识点全解 + 项目样式实现
前端·css·css3
一木 之林1 小时前
Agent智能体学习总结:从一次调用到模型自主规划、工具调用与 ReAct 循环的项目实战-6/6
前端·人工智能·学习·react.js
程序员大阳1 小时前
副队长CSS教程(36)–移动布局与响应式
前端·css·响应式·媒体查询·移动布局