在Office对象中使用rms加密
微软提供的rms服务可以对文档进行加密和授权,经过加密和授权的文档,只有指定的用户才可以查看和执行相应的操作,这对于那些想保护自己信息的企业来说无疑非常有用。我们公司打算用它来对技术管理部的文档借阅系统中的好几十个吉的文档进行保护。呵呵呵,如果一个一个文档地加密肯定不现实,那么,只有自己开发一个程序来完成这个操作了。一开始,我想使用rms的sdk中提供的方法来做,后来发现,那有点复杂。我想,既然office中已经有了这个功能,为什么不直接调用Office对象来做呢?我到msdn中搜了一把,很轻松就找到了解决方案。我根据msdn中提供的例子,我做了段小程序就解决了这个问题,下面是我的例子:
首先要引用microsoft.office.core(com组件中的office lib)和microsoft.office.excel或word
Imports Microsoft.office.Core.MsoPermission
然后用下列代码来完成加密
Try
'首先启动一个word进程,那么运行这段程序的机器上当然就要安装office2003和rms客户端啦
myApp = New Microsoft.Office.Interop.Word.ApplicationClass
'打开要加密的文档
myDoc = myApp.Documents.Open(TextBox1.Text)
myDoc.Activate()
'创建一个加密的对象
Dim IrmPermission As Microsoft.Office.Core.Permission
IrmPermission = myDoc.Permission
IrmPermission.Enabled = True
Dim msoPerm As Integer
'只读
If Me.CheckBoxReadOnly.Checked = True Then
msoPerm = msoPerm + Microsoft.Office.Core.MsoPermission.msoPermissionRead
End If
'允许打印
If Me.CheckBoxPrint.Checked = True Then
msoPerm = msoPerm + Microsoft.Office.Core.MsoPermission.msoPermissionPrint
End If
'允许复制
If Me.CheckBoxCopy.Checked = True Then
msoPerm = msoPerm + Microsoft.Office.Core.MsoPermission.msoPermissionExtract
End If
'允许完全控制
If Me.CheckBoxFullControl.Checked = True Then
msoPerm = msoPerm + Microsoft.Office.Core.MsoPermission.msoPermissionFullControl
End If
'允许另存
If Me.CheckBoxSave.Checked = True Then
msoPerm = msoPerm + Microsoft.Office.Core.MsoPermission.msoPermissionSave
End If
'允许使用浏览器阅读
If Me.CheckBoxUseBrowers.Checked = True Then
IrmPermission.EnableTrustedBrowser = True
Else
IrmPermission.EnableTrustedBrowser = False
End If
'允许脱机阅读
If Me.CheckBoxOnline.Checked = True Then
IrmPermission.StoreLicenses = False
Else
IrmPermission.StoreLicenses = True
End If
'textbox3中是允许读取该文档的用户的邮件地址,第二个参数就是前面计算好的权限代码,最后一个参数是过期日期
IrmPermission.Add(TextBox3.Text, msoPerm, ExDate) '#7/31/2005#)
'另存
myDoc.SaveAs(TextBox2.Text & "\" & System.DateTime.Now.ToString("yyyyMMddHHmmss") & ".doc")
myDoc.Close()
myApp.Quit()
IrmPermission = Nothing
myDoc = Nothing
myApp = Nothing
MessageBox.Show("OK!")
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try