付费?是不可能的!20行Python代码实现一款永久免费PDF编辑工具

关注微信公众号【七步编程】,Python、AI、大数据原创文章第一时间推送!

PDF(Portable Document Format),中文名称便携文档格式是我们经常会接触到的一种文件格式,文献、文档…很多都是PDF格式。它以格式稳定的优势,使得我们在打印、分享、传输过程中能够最优的保持原有色彩和格式。

PDF是以PostScript语言图像模型为基础的一种文档格式,它在格式的稳定性方面虽然具有很大优势。但是,在可编辑性方面却为使用者引入了另外一个困扰。

img

例如,在文档的分割、合并、剪切、转换、编辑等方面PDF就有些捉襟见肘了。

Adobe Reader、福昕阅读器、熊猫PDF…经常用到的PDF工具只能用于文档阅读,但是免费版都不可以用于文档编辑。虽然,网页版PDF工具,例如SmallPDF、I love PDF可以用于PDF的编辑,但是对于文档大小也有限制。

曾经,为了替换PDF中的一页,我几乎试遍了所有市面上主流的PDF工具,最终还是不得不选择使用付费工具来解决问题。

事后想了想,既然这些商业化软件不靠谱,为什么不考虑自己动手开发一款工具呢?明明几十行代码能够解决的问题,为什么要费那么多劲去下载、安装那些没有节操的软件呢?

本文就来介绍一下利用Python轻松开发一款PDF编辑工具,可以用于PDF转TxT、分割、合并、剪切、转换。

PyPDF2

PyPDF2是一个第三方的python PDF库,它能够对PDF文件进行分割合并裁剪转换页面

另外,它还可以对PDF文件添加自定义数据、水印、密码,也可以从PDF文件中检索出文本和元数据。

安装

使用pip直接安装:

$ pip install PyPDF2

下面就来演示几项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])

下面来解释一下代码中的几个关键点:

  1. 声明一个用于输出PDF的实例;
  2. 读取本地PDF文件;
  3. 获取PDF文档的页数;
  4. 读取PDF的第i页,添加到输出output实例中;
  5. 把编辑后的文档保存到本地;

合并PDF

已经实现了删除PDF页,接下来就看一下如何把另外一个PDF中的页面合并到当前PDF中。

方法1:

可以沿着前面删除PDF页的方式进行拓展一下,对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])
  1. 读取需要合并的源文件;
  2. 遍历到指定页,合并源PDF的页面;

方法2:

除了方法1,还有另外一种方法可以合并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)
  1. 导入PyPDF2合并模块PdfFileMerger;
  2. 读取需要处理和合并的PDF文档;
  3. 从第一个PDF文档中取出需要合并的前3页;
  4. 把第二个PDF文档的第一页插入到文档中;
  5. 把第三个PDF文档附到输出文档末尾;

除了上述介绍的2项主要功能,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

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

所以,这里就来介绍另外一款Python库来弥补它的不足。

PDFMiner是一个PDF文档的文本提取工具,它具有如下特性:

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

安装

$ pip install pdfminer

PDF转TxT

pdfminer在GitHub的托管项目中,在目录tools下给出了一些实用的工具集,例如,PDF转HTML、PDF转HTML、PDF转TXT。我们可以直接通过使用下面命令提出PDF文档中的文本信息。

$ pdf2txt.py samples/simple1.pdf

总结

通过上述2款Python库,就可以实现从页面到文本元数据的编辑,本文只是简单的介绍了每项的基本用法。关于详细的用法和函数列表,可以阅读官方文档,或者阅读GitHub上项目源码进行了解。此外,可以在这些基本的用法基础上进行发散思维,发掘更多有价值的应用场景,例如,提出文本数据之后调用翻译API进行文献翻译。也可以,对软件进行封装,开发成一款通用的PDF编辑工具。


推荐阅读
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目前市场上唯一一款真正意义上的PDF编辑器,可以对现有的任何PDF文档内容进简单、高效率的编辑修改。 主要功能优势 1、轻松修改PDF文档内容 2、以所见即所得的方式实现可靠、方便的编辑 3、无需了解PDF格式知识 4、快捷、完美的PDF页面显示 5、简洁、清晰的用户界面 6、体积小巧、轻松下载 2.1版本的最新功能 支持渐变对象 支持文本对象到图形对象的转换 非图形编辑模式下添加图形 一键去除试用标记 支持对象对齐 调整图像和渐变对象的透明度 检查更新功能 改进的文本对象创建 属性列表设置 新增快捷键 全新的图标 BUG修复 2.1版本新功能 支持渐变对象 允许用户创建和编辑渐变对象。Foxit PDF Editor为用户提供了两种渐变方式,一种是线性渐变,另一种是径向渐变。 支持文本对象到图形对象的转换 允许用户把选中的文本对象转换成图形对象,方便进印前处理,特别是当计算机不支持或无法显示某些内嵌字体的情况。Foxit PDF Editor同时为用户提供一个菜单选项,允许将PDF文件中的所有文本一次性转换为图形对象, 而后另外生成一个新的文档。 非图形编辑模式下添加图形 该版本允许用户直接在Foxit PDF Editor主窗口中添加一些简单的形状图形。 一键去除试用标记 注册用户可以通过选择“Help”>“Remove Evaluation Marks”,一次性删除Editor 2.1产生的所有试用标记。 支持对象对齐 用户可以使用工具栏中的对象对齐按钮自动排列对齐选中的对象,使得PDF页面更加整齐美观。 调整图像和渐变对象的透明度 允许用户设置图像的透明度。在透明度文本框里输入0%--100%之间的任何值调整图像透明度,图像则从完全透明变至完全不透明。 检查更新功能 单击“帮助”菜单下的“检查更新”,您可随时检查下载最新版本的Foxit PDF Editor。 改进的文本对象创建 新版本在“添加新文本对象”对话框中添加了一个对象属性选项,方便用户为添加的文本对象设置相关参数,如字体大小,文本模式,字符间距,颜色等。 < 属性列表设置 用户可以通过“选项”对话框来设置是否在启动时显示“属性列表”。 新增快捷键 为了使用户能更方便的使用Foxit PDF Editor, 新版本中添加了一些快捷键操作。如:ESC键可保存并退出即时编辑模式,Alt+ Delete 组合键则用前景色填充选择部分,Ctrl + Delete 组合键用背景色填充选择部分,Ctrl +D 为取消选择。 全新的图标 全新的Foxit PDF Editor图标蕴含着新版本更加强大的编辑功能。 BUG修复

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值