posts - 21,comments - 64,views - 25007

设置Word文档的ADRMS权限

 

引用Microsoft Office 12.0 Object Library

引用Microsoft Word 12.0 Object Library

 

复制代码
/// <summary>
    
/// 设置Word文档权限的工具类
    
/// </summary>
    public class RmsWordHelper : IDisposable
    {
        
/// <summary>
        
/// Word应用程序对象
        
/// </summary>
        private Microsoft.Office.Interop.Word.ApplicationClass app;

        
/// <summary>
        
/// Word文档路径
        
/// </summary>
        private string filePath;
        
public string FilePath
        {
            
get { return this.filePath; }
            
set { this.filePath = value; }
        }

        
/// <summary>
        
/// 权限集合
        
/// </summary>
        private List<RmsWordPermission> rmsPerms = new List<RmsWordPermission>();
        
public List<RmsWordPermission> RmsPerms
        {
            
get { return this.rmsPerms; }
        }

        
/// <summary>
        
/// 空值
        
/// </summary>
        private object MISSINGVALUE = System.Reflection.Missing.Value;

        
/// <summary>
        
/// 错误消息
        
/// </summary>
        public string ErrMessage = string.Empty;

        
        
/// <summary>
        
/// 是否docx文档
        
/// </summary>
        private bool is2007()
        {
            
bool result = false;

            result 
= System.IO.Path.GetExtension(this.filePath).ToLower() == "docx";

            
return result;
        }

        
/// <summary>
        
/// Rms授权后的文件名
        
/// </summary>
        private string GetRmsFileName()
        {
            
string filename = string.Empty;

            filename 
= System.IO.Path.Combine(System.IO.Path.GetDirectoryName(this.filePath), System.IO.Path.GetFileNameWithoutExtension(this.filePath) + "_RMS" + System.IO.Path.GetExtension(this.filePath));

            
return filename;
        }

        
/// <summary>
        
/// 保存
        
/// </summary>
        public bool Save()
        {
            
//清除错误消息
            this.ErrMessage = string.Empty;

            
bool result = false;

            
object filename_src = this.filePath;
            
object filename_dst = this.GetRmsFileName();

            
try
            {
                
if (this.app == null)
                {
                    
this.app = new Microsoft.Office.Interop.Word.ApplicationClass();
                }

                var doc 
= this.app.Documents.Open(ref filename_src, ref MISSINGVALUE, ref MISSINGVALUE, ref MISSINGVALUE,
                                                     
ref MISSINGVALUE, ref MISSINGVALUE, ref MISSINGVALUE, ref MISSINGVALUE,
                                                     
ref MISSINGVALUE, ref MISSINGVALUE, ref MISSINGVALUE, ref MISSINGVALUE,
                                                     
ref MISSINGVALUE, ref MISSINGVALUE, ref MISSINGVALUE, ref MISSINGVALUE);

                
try
                {
                    doc.Activate();

                    doc.Permission.Enabled 
= true;

                    
foreach (var permission in this.rmsPerms)
                    {
                        doc.Permission.Add(permission.UserId, permission.Perms, MISSINGVALUE);
                    }

                    
if (this.is2007())
                    {
                        doc.SaveAs(
ref filename_dst, ref MISSINGVALUE, ref MISSINGVALUE, ref MISSINGVALUE,
                                   
ref MISSINGVALUE, ref MISSINGVALUE, ref MISSINGVALUE, ref MISSINGVALUE,
                                   
ref MISSINGVALUE, ref MISSINGVALUE, ref MISSINGVALUE, ref MISSINGVALUE,
                                   
ref MISSINGVALUE, ref MISSINGVALUE, ref MISSINGVALUE, ref MISSINGVALUE);
                    }
                    
else
                    {
                        doc.SaveAs2000(
ref filename_dst, ref MISSINGVALUE, ref MISSINGVALUE, ref MISSINGVALUE,
                                       
ref MISSINGVALUE, ref MISSINGVALUE, ref MISSINGVALUE, ref MISSINGVALUE,
                                       
ref MISSINGVALUE, ref MISSINGVALUE, ref MISSINGVALUE);
                    }

                result 
= true;

            }
            
finally
            {
                doc.Close(
ref MISSINGVALUE, ref MISSINGVALUE, ref MISSINGVALUE);
            }
        }
        
catch (Exception ex)
        {
            
this.ErrMessage = ex.Message;
        }

        
return result;
            
    }

    
/// <summary>
    
/// 退出Word应用程序
    
/// </summary>
    public void Dispose()
    {
        
if (this.app != null)
        {
            
this.app.Quit(ref MISSINGVALUE, ref MISSINGVALUE, ref MISSINGVALUE);
            
this.app = null;
        }
    }
}
    
/// <summary>
/// 权限描述
/// </summary> 
public class RmsWordPermission
{
    // 域用户邮箱地址,所有用户使用“Everyone
   
public string UserId;
    // 权限枚举,多个权限使用|运算符
   
public Microsoft.Office.Core.MsoPermission Perms;
}
复制代码

 

使用示例

 

复制代码
using (RmsWordHelper helper = new RmsWordHelper())
{
    helper.FilePath 
= filePath;
    helper.RmsPerms.Add(
new RmsWordPermission() { UserId="Everyone", Perms= Microsoft.Office.Core.MsoPermission.msoPermissionRead });

    
if (helper.Save())
    {
        MessageBox.Show(
"ok");
    }
    
else
    {
        MessageBox.Show(helper.ErrMessage);
    }
}
复制代码

 

posted on   王庭安  阅读(958)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
< 2011年8月 >
31 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 1 2 3
4 5 6 7 8 9 10

点击右上角即可分享
微信分享提示