查看: 122|回复: 3

Python+Spire.Doc实现Word文档加密与编辑权限限制

[复制链接]
发表于 1 小时前 | 显示全部楼层 |阅读模式
在自动化处理Word文档的脚本任务中,安全控制是不可忽视的环节。对于财务报表、合同底稿等敏感文件,需要限制未授权用户的查看和修改权限,而Spire.Doc for Python库提供了轻量级的解决方案,无需安装Microsoft Office即可实现对.docx文档的加密、解密、全局只读保护以及局部可编辑区域设置。以下通过实际代码演示每种场景的具体实现。
  1. pip install Spire.Doc
复制代码

Spire.Doc for Python完全基于Python环境运行,依赖底层组件处理Word格式,适合集成到服务器端自动化流程中。

一、完全加密:限制打开
将整个文档加密后,打开文件时必须输入密码,否则无法查看任何内容。适用于薪酬表、商业机密等需严格保密的场景。
  1. from spire.doc import *
  2. from spire.doc.common import *
  3. document = Document()
  4. document.LoadFromFile("原始文档.docx")
  5. document.Encrypt("PassWord")
  6. document.SaveToFile("加密文档.docx", FileFormat.Docx)
  7. document.Dispose()
  8. document.Close()
复制代码

调用Encrypt()方法后,文档被密码保护,验证失败时无法读取。

二、解除加密:恢复公开访问
当文档不再需要密码保护时,可在加载时传入正确密码,然后调用RemoveEncryption()清除加密标记。
  1. from spire.doc import *
  2. from spire.doc.common import *
  3. document = Document()
  4. document.LoadFromFile("加密文档.docx", FileFormat.Docx, "PassWord")
  5. document.RemoveEncryption()
  6. document.SaveToFile("解密文档.docx", FileFormat.Docx)
  7. document.Dispose()
  8. document.Close()
复制代码

注意:LoadFromFile的第三个参数为文档密码,用于解密读取,随后清除密码后的文件不再需要密码即可打开。

三、编辑权限限制:只读、仅修订、仅批注、仅表单
对于制度文件或通知类文档,允许所有人阅读但禁止随意修改。Protect()方法可设置编辑限制类型:

- AllowOnlyReading:只读,锁定全部内容。
- AllowOnlyRevisions:仅允许修订。
- AllowOnlyComments:仅允许添加批注。
- AllowOnlyFormFields:仅允许填写表单域。

以下示例将文档设为只读并设置解除密码:
  1. from spire.doc import *
  2. from spire.doc.common import *
  3. doc = Document()
  4. doc.LoadFromFile("示例.docx")
  5. doc.Protect(ProtectionType.AllowOnlyReading, "password")
  6. doc.SaveToFile("编辑限制.docx")
  7. doc.Close()
复制代码

若需切换限制类型,只需替换ProtectionType枚举值。

四、局部权限控制:整体只读+指定段落可编辑
在合同会签或模板填报场景中,只需开放特定段落供用户修改,其余区域锁定。实现步骤:
1. 获取目标章节及段落。
2. 在段落开头插入PermissionStart,结尾插入PermissionEnd,两者需使用相同的区域ID(如"exception1")。
3. 调用Protect(AllowOnlyReading)开启全局只读。

这样处理后在Word中打开,仅标记区域可编辑,其余内容受保护。
  1. from spire.doc import *
  2. from spire.doc.common import *
  3. doc = Document()
  4. doc.LoadFromFile("示例.docx")
  5. section = doc.Sections.get_Item(0)
  6. start = PermissionStart(doc, "exception1")
  7. end = PermissionEnd(doc, "exception1")
  8. paragraph = section.Paragraphs.get_Item(1)
  9. paragraph.ChildObjects.Insert(0, start)
  10. paragraph.ChildObjects.Add(end)
  11. doc.Protect(ProtectionType.AllowOnlyReading, "password")
  12. doc.SaveToFile("局部可编辑.docx")
  13. doc.Close()
复制代码

注意:PermissionStart和PermissionEnd必须成对出现且ID一致;段落索引从0开始。

五、方案选择参考
- 需要完全保密:使用Encrypt加密整个文档,打开需密码。
- 批量解密归档:使用RemoveEncryption清除密码。
- 制度发布只读:使用Protect(AllowOnlyReading)。
- 合同会签留空:使用PermissionStart+PermissionEnd配合Protect。

通过Spire.Doc for Python,只需几行代码即可实现从全局加密到细粒度编辑权限控制,适合集成到自动化办公脚本中批量处理Word文档的安全策略。
回复

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: Python+Spire.Doc实现Word文档加密与编辑权限限制

楼主的教程非常实用,从完全加密到局部可编辑控制,每个场景都有清晰代码和适用说明,对自动化处理敏感文档很有帮助。特别是PermissionStart和PermissionEnd配合全局只读的思路,解决了合同会签中“大部分锁定、少数字段可填”的痛点。一个小补充:使用Spire.Doc时注意Free版本的限制(比如文档页数或段落数),如果处理大批量文档可能需要考虑授权。另外,Encrypt和Protect同时使用时,建议先设置编辑权限再加密,避免逻辑冲突。感谢分享!
回复 支持 反对

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: Python+Spire.Doc实现Word文档加密与编辑权限限制

感谢楼主分享这么详细的教程!Spire.Doc 不需要安装 Office 就能在服务器端批量处理 Word 安全策略,确实很方便。代码结构清晰,特别是局部可编辑区域那块,用 PermissionStart/End 配合全局只读的做法很实用,恰好解决了合同会签中只开放关键字段填写的痛点。另外想问一下,对于大文档(比如几百页),加密和解除加密的性能表现如何?会不会有明显的延迟?再次感谢!
回复 支持 反对

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: Python+Spire.Doc实现Word文档加密与编辑权限限制

感谢楼主分享这么详细的教程!Spire.Doc 这个库确实很适合在服务器上做批量文档处理,不用依赖 Office 环境。你提到的局部权限控制那段特别实用,之前我还在想怎么在 Word 里只开放几个段落让别人填写,看了 PermissonStart 和 PermissionEnd 的用法一下就明白了。请问在设置局部可编辑时,如果文档里有多个表格或图片,这些元素默认会被锁定吗?还是需要特殊的处理?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-7-11 11:46 , Processed in 0.030615 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部