时间:2019-11-13  来源:简书  作者:PythonOffice  阅读:7

每个人都有秘密,每个公司也是。我们的很多文件不想给某些人看到,那就可以利用PDF的加密功能设置密码。如果我们生成了很多PDF,一个一个地加密,将费时费力。这种重复的繁重的事儿交给Python,它会不辱使命,你会轻松百倍:)

import PyPDF2 #可从PDF文档提取信息

import os #用于获取需要合并的PDF文件所在路径

path="data/" # 文件夹路径

#1.获取需要加密的文件名及路径

files=[]

for file in os.listdir(path):

if file.endswith(".pdf"): #排除文件夹内的其它干扰文件,只获取PDF文件

files.append(path+file)

files

>>['data/INV1.pdf',

'data/INV2.pdf',

'data/INV3.pdf',

'data/INV4.pdf',

'data/INV5.pdf']

以上是先获取我们需要加密的PDF文件所在路径及文件名。详细解释请见:实例4:用Python提取不同PDF文件中的页面合并进新的PDF文件

#2.获取每个PDF文件并加密保存

for file in files:

pdf_obj=open(file,'rb')# 以二进制读取,将保留PDF中的所有信息

pdf_reader=PyPDF2.PdfFileReader(pdf_obj)

pdf_writer=PyPDF2.PdfFileWriter()

for page_num in range(pdf_reader.numPages):

page_obj=pdf_reader.getPage(page_num)

pdf_writer.addPage(page_obj)

pdf_writer.encrypt('pass')# 加密,密码设为'pass',可个性化调整

#写入并保存PDF文件

pdf_output_file=open(file.split(".")[0]+"_sec.pdf",'wb') #以二进制写入,将保留源PDF中的所有信息

pdf_writer.write(pdf_output_file)

pdf_output_file.close()

我们使用for循环,逐个给每个PDF文件加密。首先打开PDF文件pdf_obj=open(file,'rb'),然后读取信息pdf_reader=PyPDF2.PdfFileReader(pdf_obj),然后建一个写入变量pdf_writer=PyPDF2.PdfFileWriter(),随后遍历每个PDF文件的每一页,然后加入到写入变量pdf_writer。页面加入完了之后,设置密码pdf_writer.encrypt('pass')。密码设置完成后,就保存文件。为避免源文件出问题,此处我们保存为新的文件,命名方式为在源文件名后加上“_sec”。

其中file.split(".")[0]+"_sec.pdf"的原理可通过如下理解。更多详细解释请参考:实例4:用Python提取不同PDF文件中的页面合并进新的PDF文件

实例6:用Python给PDF批量加密

image

这个处理速度较慢,需要耐心等待。加密完成后的结果如下:

实例6:用Python给PDF批量加密

image

我们试着打开一个加密后的文件,果然弹出输入密码的对话框,输入我们设定的密码即可进入。

实例6:用Python给PDF批量加密

image

所有源代码和说明都在Jupyter notebook上完成,所用到的Excel 资料已上传GitHub, 欢迎Fork或下载到本地随意玩。。。转载请注明出处,谢谢。

GitHub链接:https://github.com/weidylan/Office_Automation_by_Using_Python

Top