python实现拆分、合并、删除pdf
PDF(Portable Document Format),中⽂名称便携⽂档格式是我们经常会接触到的⼀种⽂件格式,⽂献、⽂档…很多都是PDF格式。它以格式稳定的优势,使得我们在打印、分享、传输过程中能够最优的保持原有⾊彩和格式。PDF是以PostScript语⾔图像模型为基础的⼀种⽂档格式,它在格式的稳定性⽅⾯虽然具有很⼤优势。但是,在可编辑性⽅⾯却为使⽤者引⼊了另外⼀个困扰。
例如,在⽂档的分割、合并、剪切、转换、编辑等⽅⾯PDF就有些捉襟见肘了。Adobe Reader、福昕阅读器、熊猫PDF…经常⽤到的PDF ⼯具只能⽤于⽂档阅读,但是免费版都不可以⽤于⽂档编辑。虽然,⽹页版PDF⼯具,例如SmallPDF、I love PDF可以⽤于PDF的编辑,但是对于⽂档⼤⼩也有限制。曾经,为了替换PDF中的⼀页,我⼏乎试遍了所有市⾯上主流的PDF⼯具,最终还是不得不选择使⽤付费⼯具来解决问题。事后想了想,既然这些商业化软件不靠谱,为什么不考虑⾃⼰动⼿开发⼀款⼯具呢?明明⼏⼗⾏代码能够解决的问题,为什么要费那么多劲去下载、安装那些没有节操的软件呢?本⽂就来介绍⼀下利⽤Python轻松开发⼀款PDF编辑⼯具,可以⽤于PDF转TxT、分割、合并、剪切、转换。PyPDF2PyPDF2是⼀个第三⽅的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 = NumPages()//3
for i in range(pages):
if i+1in index:
continue
output.Page(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进⾏合并。
python中文文档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 = NumPages()
k =0
for i in range(pages):
if i+1in add_index:
output.Page(origin_index[k]))//2
pages +=1
k +=1
output.Page(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
<(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也有⼀些其他⼩功能:旋转
使得页⾯1旋转90度。添加⽔印
page = Page(3)
watermark = PdfFileReader(open("watermark.pdf","rb"))
其中,⽔印存储在另外⼀个PDF⽂档watermark.pdf中。加密
password ="secret"
⾸先给⼀个secret密码,然后使⽤encrypt对输出⽂档进⾏加密。pdfminer前⾯介绍的PyPDF2主要擅长于PDF页⾯级编辑,⽽对于⽂本和源数据级别编辑能⼒较弱。所以,这⾥就来介绍另外⼀款Python库
来弥补它的不⾜。PDFMiner是⼀个PDF⽂档的⽂本提取⼯具,它具有如下特性:能够准确获取⽂本的位置和布局信息;可以将PDF转换为HTML/XML等格式;可以提取⽬录;可以提取标签内容;⽀持各种字体类型(Type1、TrueType、Type3和CID);⽀持中、⽇、韩语⾔和垂直书写⽂本;安装
$ pip install pdfminer
PDF转TxTpdfminer在GitHub的托管项⽬中,在⽬录tools下给出了⼀些实⽤的⼯具集,例如,PDF转HTML、PDF转HTML、PDF转TXT。我们可以直接通过使⽤下⾯命令提出PDF⽂档中的⽂本信息。$ pdf2txt.py samples/simple1.pdf
总结通过上述2款Python库,就可以实现从页⾯到⽂本元数据的编辑,本⽂只是简单的介绍了每项的基本⽤法。关于详细的⽤法和函数列表,可以阅读官⽅⽂档,或者阅读GitHub上项⽬源码进⾏了解。此外,可以在这些基本的⽤法基础上进⾏发散思维,发掘更多有价值的应⽤场景,例如,提出⽂本数据之后调⽤翻译API进⾏⽂献翻译。也可以,对软件进⾏封装,开发成⼀款通⽤的PDF编辑⼯具。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论