在自动化处理Word文档的脚本任务中,安全控制是不可忽视的环节。对于财务报表、合同底稿等敏感文件,需要限制未授权用户的查看和修改权限,而Spire.Doc for Python库提供了轻量级的解决方案,无需安装Microsoft Office即可实现对.docx文档的加密、解密、全局只读保护以及局部可编辑区域设置。以下通过实际代码演示每种场景的具体实现。
Spire.Doc for Python完全基于Python环境运行,依赖底层组件处理Word格式,适合集成到服务器端自动化流程中。
一、完全加密:限制打开
将整个文档加密后,打开文件时必须输入密码,否则无法查看任何内容。适用于薪酬表、商业机密等需严格保密的场景。
- from spire.doc import *
- from spire.doc.common import *
- document = Document()
- document.LoadFromFile("原始文档.docx")
- document.Encrypt("PassWord")
- document.SaveToFile("加密文档.docx", FileFormat.Docx)
- document.Dispose()
- document.Close()
复制代码
调用Encrypt()方法后,文档被密码保护,验证失败时无法读取。
二、解除加密:恢复公开访问
当文档不再需要密码保护时,可在加载时传入正确密码,然后调用RemoveEncryption()清除加密标记。
- from spire.doc import *
- from spire.doc.common import *
- document = Document()
- document.LoadFromFile("加密文档.docx", FileFormat.Docx, "PassWord")
- document.RemoveEncryption()
- document.SaveToFile("解密文档.docx", FileFormat.Docx)
- document.Dispose()
- document.Close()
复制代码
注意:LoadFromFile的第三个参数为文档密码,用于解密读取,随后清除密码后的文件不再需要密码即可打开。
三、编辑权限限制:只读、仅修订、仅批注、仅表单
对于制度文件或通知类文档,允许所有人阅读但禁止随意修改。Protect()方法可设置编辑限制类型:
- AllowOnlyReading:只读,锁定全部内容。
- AllowOnlyRevisions:仅允许修订。
- AllowOnlyComments:仅允许添加批注。
- AllowOnlyFormFields:仅允许填写表单域。
以下示例将文档设为只读并设置解除密码:
- from spire.doc import *
- from spire.doc.common import *
- doc = Document()
- doc.LoadFromFile("示例.docx")
- doc.Protect(ProtectionType.AllowOnlyReading, "password")
- doc.SaveToFile("编辑限制.docx")
- doc.Close()
复制代码
若需切换限制类型,只需替换ProtectionType枚举值。
四、局部权限控制:整体只读+指定段落可编辑
在合同会签或模板填报场景中,只需开放特定段落供用户修改,其余区域锁定。实现步骤:
1. 获取目标章节及段落。
2. 在段落开头插入PermissionStart,结尾插入PermissionEnd,两者需使用相同的区域ID(如"exception1")。
3. 调用Protect(AllowOnlyReading)开启全局只读。
这样处理后在Word中打开,仅标记区域可编辑,其余内容受保护。
- from spire.doc import *
- from spire.doc.common import *
- doc = Document()
- doc.LoadFromFile("示例.docx")
- section = doc.Sections.get_Item(0)
- start = PermissionStart(doc, "exception1")
- end = PermissionEnd(doc, "exception1")
- paragraph = section.Paragraphs.get_Item(1)
- paragraph.ChildObjects.Insert(0, start)
- paragraph.ChildObjects.Add(end)
- doc.Protect(ProtectionType.AllowOnlyReading, "password")
- doc.SaveToFile("局部可编辑.docx")
- doc.Close()
复制代码
注意:PermissionStart和PermissionEnd必须成对出现且ID一致;段落索引从0开始。
五、方案选择参考
- 需要完全保密:使用Encrypt加密整个文档,打开需密码。
- 批量解密归档:使用RemoveEncryption清除密码。
- 制度发布只读:使用Protect(AllowOnlyReading)。
- 合同会签留空:使用PermissionStart+PermissionEnd配合Protect。
通过Spire.Doc for Python,只需几行代码即可实现从全局加密到细粒度编辑权限控制,适合集成到自动化办公脚本中批量处理Word文档的安全策略。 |