itext7读取pdf 中文_实例6:用Python给PDF批量加密

4e524c73c5286d4bc62f26895d6bcc6b.png

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

b7b3c28ed460ac3ad01093ae4705e87e.png

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

f63b757db2016818fb953ab94fe44c3e.png

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

fbc313f75a7ea63478786dfdbc101bef.png

所有源代码和说明都在Jupyter notebook上完成,所用到的Excel 资料已上传GitHub, 欢迎Fork或下载到本地随意玩。。。转载请注明出处,谢谢。GitHub链接:https://github.com/weidylan/Office_Automation_by_Using_Python微信公众号:Python操作Office软件高效工作

bfab1c1064ef64809a4f73d3252d0563.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值