美文网首页每天写1000字
使用Python编辑PDF

使用Python编辑PDF

作者: StephenWei | 来源:发表于2019-10-05 11:33 被阅读0次

这篇文章介绍使用Python处理PDF文件的编辑任务。分为几个不同的部分:加密PDF,提取PDF的文字内容,合并PDF文件,添加水印。

加密PDF文件

我们先来拷贝一份PDF文件,然后对它加密。在这里,需要使用到库PyPDF2,如果没有的话,需要提前安装: pip3 install PyPDF2,所有的读写操作都可以由它完成,对于文件加密,它提供了非常方便的接口PdfFileWriter::encrypt,接下来看看例子。

code snippet:

import PyPDF2

fileName = "/Users/weiyang/Desktop/Test.pdf"
newFileName = "/Users/weiyang/Desktop/NewTest.pdf"
file = open( fileName, 'rb' )
reader = PyPDF2.PdfFileReader( file )
writer = PyPDF2.PdfFileWriter()
for pageIndex in range( reader.numPages ):
    writer.addPage( reader.getPage( pageIndex ) )

writer.encrypt( 'bell' ) #passwd
newFile = open( newFileName, "wb" )
writer.write( newFile )
newFile.close()
file.close()

result:


NewTest.PDF

如果不想保留原始的文件,可以使用OS库中的rename方法,将新的文件覆盖Test.pdf即可。要使用Python解密的话,PdfFileReader的decrypt方法可以帮助到我们。

从PDF中提取文本内容

实验的材料还是上面部分的Test.pdf,第三方库PyPDF2能帮助我们提取文本,可它也仅限于提取文本内容,不能要求更多了。PDF是一种二进制文件,很难做到全部提取。从目前的技术水平来看,我们只能尽可能提取多的文本。
下面的代码展示了简单的提取流程,结果不完美,少了一行文字。

import PyPDF2
import os

fileName = "/Users/weiyang/Desktop/Test.pdf"
file = open( fileName, 'rb' )
reader = PyPDF2.PdfFileReader( file )
page = reader.getPage( 0 )
content = page.extractText()
print content
file.close()

合并两份不同的PDF文件

有时候,我们想要把不同的PDF文件合并成一份,在PyPDF2看来,这就是读写操作的组合。在下面的例子中,我将Test1.pdf和Test2.pdf合并成新的文件NewTest.pdf。
(我们还可以针对Test1.pdf和Test2.pdf组合writer.addPage,调整页面的次序,自由发挥)

import PyPDF2

fileName1 = "/Users/weiyang/Desktop/Test1.pdf"
fileName2 = "/Users/weiyang/Desktop/Test2.pdf"
newFileName = "/Users/weiyang/Desktop/NewTest.pdf"

file1 = open( fileName1, 'rb' )
file2 = open( fileName2, 'rb' )

reader1 = PyPDF2.PdfFileReader( file1 )
reader2 = PyPDF2.PdfFileReader( file2 )

writer = PyPDF2.PdfFileWriter()

for pageIndex in range( reader1.numPages ):
    writer.addPage( reader1.getPage( pageIndex ) )

for pageIndex in range( reader2.numPages ):
    writer.addPage( reader2.getPage( pageIndex ) )

newFile = open( newFileName, "wb" )
writer.write( newFile )
newFile.close()
file1.close()
file2.close()

当file.close之后,才能确保内容被写入磁盘哦。

给PDF加水印

我使用微软Office doc写了个艺术字,然后导出成一份PDF文件,把它作为水印文件 —— 机智如我,接着把它叠加到NewTest.pdf的每一页上。


watermark.pdf

叠加,并不像我们想象的那么复杂,PageObject::mergePage能帮助我们很容易做到这一点。参考下面的例子。

Code:

import PyPDF2

fileName = "/Users/weiyang/Desktop/NewTest.pdf"
fileName2 = "/Users/weiyang/Desktop/WaterMark.pdf"
fileName3 = "/Users/weiyang/Desktop/Result.pdf"
file = open( fileName, 'rb' )

reader = PyPDF2.PdfFileReader( file )
waterMarkReader = PyPDF2.PdfFileReader( open( fileName2, "rb" ) )
writer = PyPDF2.PdfFileWriter()

for pageIndex in range( reader.numPages ):
    pageObj = reader.getPage( pageIndex )
    pageObj.mergePage( waterMarkReader.getPage( 0 ) )
    writer.addPage( pageObj )

resultFile = open( fileName3, "wb" )
writer.write( resultFile )
resultFile.close()
file.close()

Result:


image

相关文章

网友评论

    本文标题:使用Python编辑PDF

    本文链接:https://www.haomeiwen.com/subject/yibepctx.html