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

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

例如,在文档的分割、合并、剪切、转换、编辑等方面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, PdfFileReaderoutput = PdfFileWriter()     // 1
input1 = PdfFileReader(open("example.pdf", "rb")) // 2def delete_pdf(index):pages = input1.getNumPages() // 3for i in range(pages):if i+1 in index:continueoutput.addPage(input1.getPage(i))  // 4outputStream = open("PyPDF2-output.pdf", "wb")output.write(outputStream)  // 5delete_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, PdfFileReaderoutput = PdfFileWriter()
input1 = PdfFileReader(open("example.pdf", "rb"))
input2 = PdfFileReader(open("simple2.pdf", "rb")) // 1def merge_pdf(add_index, origin_index):pages = input1.getNumPages()k = 0for i in range(pages):if i+1 in add_index:output.addPage(input2.getPage(origin_index[k])) // 2pages += 1k += 1output.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 // 1merger = PdfFileMerger()input1 = open("document1.pdf", "rb") // 2
input2 = open("document2.pdf", "rb")
input3 = open("document3.pdf", "rb")merger.append(fileobj = input1, pages = (0,3)) // 3merger.merge(position = 2, fileobj = input2, pages = (0,1)) // 4merger.append(input3) // 5output = 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编辑工具。

https://u.wechat.com/MCrmocmX5dYALaEqsBzet9s (二维码自动识别)

https://u.wechat.com/MCrmocmX5dYALaEqsBzet9s (二维码自动识别)

https://u.wechat.com/MCrmocmX5dYALaEqsBzet9s (二维码自动识别)

https://u.wechat.com/MCrmocmX5dYALaEqsBzet9s<br> (二维码自动识别)

html旋转代码_付费?是不可能的!20行Python代码实现一款永久免费PDF编辑工具相关推荐

  1. python pdf编辑开发_20行Python代码实现一款永久免费PDF编辑工具的实现

    PDF(Portable Document Format),中文名称便携文档格式是我们经常会接触到的一种文件格式,文献.文档...很多都是PDF格式.它以格式稳定的优势,使得我们在打印.分享.传输过程 ...

  2. antd的table遍历之后添加合计行_付费?是不可能的!20行Python代码实现一款永久免费PDF编辑工具...

    专注Python.AI.大数据 @七步编程 ​PDF(Portable Document Format),中文名称便携文档格式是我们经常会接触到的一种文件格式,文献.文档...很多都是PDF格式.它以 ...

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

    (扫码关注) PDF(Portable Document Format),中文名称便携文档格式是我们经常会接触到的一种文件格式,文献.文档...很多都是PDF格式.它以格式稳定的优势,使得我们在打印. ...

  4. python编辑器中文版_20行Python代码实现一款永久免费PDF编辑工具

    转自知乎@Jackpop:https://zhuanlan.zhihu.com/p/153468702知乎搜索"开源 PDF 嵌入字体 Python"的结果 PDF(Portabl ...

  5. python目标识别代码_利用ImageAI库只需几行python代码超简实现目标检测

    什么是目标检测 目标检测关注图像中特定的物体目标,需要同时解决解决定位(localization) + 识别(Recognition).相比分类,检测给出的是对图片前景和背景的理解,我们需要从背景中分 ...

  6. 聚类 python 代码_不足 20 行 Python 代码,高效实现 k-means 均值聚类算法

    下载好向圈APP可以快速联系圈友 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 不足 20 行 Python 代码,高效实现 k-means 均值聚类算法-1.jpg (143.81 KB, ...

  7. python做出来的小程序、可以在win10上面运行_超详细,手把手教你用20行Python代码制作飞花令小程序!...

    原标题:超详细,手把手教你用20行Python代码制作飞花令小程序! 来源:早起Python 作者:陈熹 飞花令是古时候人们经常玩一种"行酒令"的游戏,是中国古代酒令之一,属雅令. ...

  8. python小游戏代码大全-20行python代码的入门级小游戏的详解

    背景: 作为一个python小白,今天从菜鸟教程上看了一些python的教程,看到了python的一些语法,对比起来(有其他语言功底),感觉还是非常有趣,就随手添了一点内容,改了一个小例程,当着练练手 ...

  9. 20行 Python 代码爬取王者荣耀全英雄皮肤 | 原力计划

    作者 | wangweijun 责编 | Elle 出品 | CSDN 博客 引言 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了.我们今天的重点是爬取王 ...

最新文章

  1. atitit.mp4 视频文件多媒体格式结构详解
  2. Parallels Desktop 16 Win11虚拟机将继续正常运作,但将无法连接网络
  3. 月均活跃用户达1.3亿,B站高可用架构实践
  4. 一、node.js搭建最简单的服务器
  5. free,ps,抓包,网络状态
  6. 【优化选址】基于matlab穷举法求解小区基站选址优化问题【含Matlab源码 439期】
  7. sqlplus无密码登录TNS协议适配器错误
  8. 基于STM32C8T6的蓝牙PS4遥控小车手柄
  9. 思科服务器如何进入网站,思科路由器怎么进入设置网站
  10. poj 2536 Gopher II
  11. 直击AWE2018:当AI遇见LED,诸葛小明给光更多可能
  12. 不同长度的字符串/中文串相似度对比算法
  13. TriSun PDF to X中文版批量pdf转换功能
  14. October 2009
  15. 如何才能增强产品的黏性?
  16. 开源的APP+小程序商城源码推荐,可支持二次开发。
  17. 你不得不了解的三大动态域名解析软件选型要素
  18. 基于intel x86+fpga智能驾驶舱和高级驾驶辅助系统硬件设计(二)
  19. python3版本降级
  20. 聚类分析(系统聚类,K-mean聚类)

热门文章

  1. 识别它的飞鸽传书2012方法是光圈环
  2. 免费语音软件可以导入你在飞鸽传书2008
  3. C++ 中重载 + 操作符的正确方法
  4. ^_-诚征BLOG友情连接
  5. 推荐 6 个不错的JavaScript动画库
  6. 对不起,我不接私活了
  7. 大数据时代,你的信息安全谁负责?
  8. python找图里的环_python判断无向图环是否存在的示例
  9. 岗位多多,招聘 23人 | 中国农业科学院深圳农业基因组研究所诚聘博士后和科研人员...
  10. 罗莎琳德·富兰克林:隐于幕后的DNA之母,以及她被误解却又伟大的短暂一生...