Tool尖尖

Do it just once!

庆祝中国共产党成立100周年

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

| 暂无评论

每个人都有秘密,每个公司也是。我们的很多文件不想给某些人看到,那就可以利用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文件

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

 

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

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

https://github.com/weidylan/Office_Automation_by_Using_Python

本篇文章来源于微信公众号: Python操作Office软件高效工作 已获作者转载许可。

发表评论

*为必填字段!