Python实现免费PDF编辑工具:PyPDF2与pdfminer实战指南

月亮慢半拍
月亮慢半拍
发布时间:2026-10-14 | 5人浏览过
原创

本文介绍如何利用Python开发一款永久免费的PDF编辑工具。通过PyPDF2库实现PDF页面的删除、合并、旋转及加密功能,并结合pdfminer库进行文本提取与格式转换。文章提供详细代码示例与安装步骤,帮助开发者快速掌握PDF处理技术。

PDF编辑痛点与Python解决方案

PDF(Portable Document Format,便携文档格式)是日常办公中极为常见的文件类型,广泛应用于文献、报告等场景。凭借其格式高度稳定的特性,PDF在打印、分享及传输过程中能够最大程度地保留原始色彩与排版效果。

PDF基于PostScript语言图像模型构建,虽在格式稳定性上优势显著,但在可编辑性方面却给使用者带来了诸多不便。

具体而言,在文档分割、合并、剪切、格式转换及内容编辑等操作中,PDF往往显得力不从心。

诸如Adobe Reader、福昕阅读器、熊猫PDF等主流工具主要用于文档阅读,其免费版本通常不支持编辑功能。虽然SmallPDF、I love PDF等网页版工具提供了编辑能力,但往往对文件大小设有严格限制。

曾有一次,为了替换PDF中的某一页,我尝试了市面上几乎所有主流工具,最终仍不得不付费使用专业软件才能解决问题。

反思之后,既然商业化软件存在诸多限制,为何不尝试自行开发一款工具?既然几十行代码即可解决的问题,何必耗费精力去下载和安装那些缺乏灵活性的软件?

本文将介绍如何利用Python轻松开发一款PDF编辑工具,实现PDF转TXT、页面分割、合并、剪切及格式转换等功能。

PyPDF2库安装与核心功能

PyPDF2

PyPDF2是一个第三方Python库,支持对PDF文件进行分割、合并、裁剪及页面转换操作。

此外,它还支持为PDF添加自定义数据、水印及密码保护,并能从PDF中提取文本和元数据信息。

安装

可通过pip直接安装该库:


$ pip install PyPDF2

接下来将演示几项核心PDF编辑功能,并逐行解析代码含义。

删除PDF页面实现

删除PDF页面

首先展示实现代码:


from PyPDF2 import PdfFileWriter, PdfFileReader

output = PdfFileWriter()   // 1
input1 = PdfFileReader(open("example.pdf", "rb")) // 2

def delete_pdf(index):
 pages = input1.getNumPages() // 3

 for i in range(pages):
 if i+1 in index:
  continue
 output.addPage(input1.getPage(i)) // 4

 outputStream = open("PyPDF2-output.pdf", "wb")
 output.write(outputStream) // 5

delete_pdf([2,3,4])

以下解释代码中的关键步骤:

  • 声明一个用于输出PDF的实例;
  • 读取本地PDF文件;
  • 获取PDF文档的总页数;
  • 读取PDF的第i页,并将其添加到输出output实例中;
  • 将编辑后的文档保存至本地。

合并PDF页面方法

合并PDF

在实现删除页面功能后,接下来演示如何将另一个PDF中的页面合并到当前文档中。

方法1:

可基于前述删除页面的逻辑进行拓展,实现PDF合并功能。


from PyPDF2 import PdfFileWriter, PdfFileReader

output = PdfFileWriter()
input1 = PdfFileReader(open("example.pdf", "rb"))
input2 = PdfFileReader(open("simple2.pdf", "rb")) // 1

def merge_pdf(add_index, origin_index):
 pages = input1.getNumPages()
 k = 0
 for i in range(pages):
 if i+1 in add_index:
  output.addPage(input2.getPage(origin_index[k])) // 2
  pages += 1
  k += 1
 output.addPage(input1.getPage(i))

 outputStream = open("PyPDF2-output.pdf", "wb")
 output.write(outputStream)

merge_pdf([2,3,4], [0, 0, 0])

读取需要合并的源文件;

遍历指定页码,将源PDF的页面合并入目标文档;

方法2:

除上述方法外,还有另一种合并PDF的方式:


from PyPDF2 import PdfFileMerger // 1

merger = PdfFileMerger()

input1 = open("document1.pdf", "rb") // 2
input2 = open("document2.pdf", "rb")
input3 = open("document3.pdf", "rb")

merger.append(fileobj = input1, pages = (0,3)) // 3

merger.merge(position = 2, fileobj = input2, pages = (0,1)) // 4

merger.append(input3) // 5

output = open("document-output.pdf", "wb")
merger.write(output)
  • 导入PyPDF2合并模块PdfFileMerger;
  • 读取待处理和合并的PDF文档;
  • 从第一个PDF文档中提取前3页;
  • 将第二个PDF文档的第一页插入到指定位置;
  • 将第三个PDF文档附加到输出文档末尾。

除上述两项主要功能外,PyPDF2还提供了一些其他实用小功能:

页面旋转、水印与加密

页面旋转


input1.getPage(1).rotateClockwise(90)

使页面1顺时针旋转90度。

添加水印


page = input1.getPage(3)
watermark = PdfFileReader(open("watermark.pdf", "rb"))
page.mergePage(watermark.getPage(0))

其中,水印内容存储在另一个PDF文档watermark.pdf中。

文档加密


password = "secret"
output.encrypt(password)

首先设置一个secret密码,随后使用encrypt函数对输出文档进行加密处理。

pdfminer库与文本提取

pdfminer

前文介绍的PyPDF2主要擅长于PDF页面级的编辑操作,而在文本及源数据级别的编辑能力相对较弱。

因此,此处引入另一款Python库以弥补上述不足。

PDFMiner是一款专注于PDF文档文本提取的工具,具备以下特性:

  • 能够精准获取文本的位置与布局信息;
  • 支持将PDF转换为HTML/XML等格式;
  • 可提取文档目录;
  • 支持提取标签内容;
  • 兼容多种字体类型(Type1、TrueType、Type3和CID);
  • 支持中、日、韩语言及垂直书写文本。

安装


$ pip install pdfminer

PDF转TXT

在pdfminer的GitHub托管项目中,目录tools下提供了若干实用工具集,例如PDF转HTML、PDF转TXT等。我们可以直接通过以下命令提取PDF文档中的文本信息。


$ pdf2txt.py samples/simple1.pdf

总结与应用拓展

总结

通过上述两款Python库,即可实现从页面级到文本元数据级的编辑功能。本文仅简要介绍了各项基本用法,详细用法及函数列表可参考官方文档或GitHub项目源码。此外,可基于这些基本用法拓展思维,发掘更多有价值的应用场景,例如在提取文本数据后调用翻译API进行文献翻译。也可对软件进行封装,开发成通用的PDF编辑工具。

到此这篇关于20行Python代码实现一款永久免费PDF编辑工具的实现的文章就介绍到这了,更多相关Python 免费PDF编辑工具内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表