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, 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中的页面合并到当前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])
读取需要合并的源文件;
遍历到指定页,合并源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)
- 导入PyPDF2合并模块
PdfFileMerger
; - 读取需要处理和合并的PDF文档;
- 从第一个PDF文档中取出需要合并的前3页;
- 把第二个PDF文档的第一页插入到文档中;
- 把第三个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编辑工具。
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】