技术开发 频道

C#生成CHM文件 实现在线网页自动保存

  反编译导出类主要方法

/// <summary>
        
/// feedback about processing
        
/// </summary>
        
public event EventHandler<ProcessFileEventArgs> ProcessFileIntoWord;//定义一个事件属性
        
private WordClass withEventsField_w = new WordClass();
        
/// <summary>
        
/// 通过这个类,我们可以转换为word,并且把事件传给调用者
        
/// </summary>    
        
public WordClass w
        {
            
get { return withEventsField_w; }
            
set
            {
                
if (withEventsField_w != null)//如果不为null,撤销事件
                {
                    withEventsField_w.ProcessFile
-= w_ProcessFile;
                }
                withEventsField_w
= value;
                
if (withEventsField_w != null)//如果不为null,注册
                {
                    withEventsField_w.ProcessFile
+= w_ProcessFile;
                }
            }
        }
        
/// <summary>
        
/// 主要函数:反编译、导出
        
/// </summary>
        
/// <param name="ChmFile">待反编译的CHM文件</param>
        
/// <param name="DocFile">word文件名</param>
        
/// <remarks>word文件一定不存在</remarks>
        
public void DecompileAndExport(string ChmFile, string DocFile)
        {
            try
            {
                Decompile d
= new Decompile();//实例化一个反编译类
                
string strHHC = d.DecompileChm(ChmFile);//获取hhc文件
                w.AddToWord(strHHC, DocFile);
//调用word类的添加到word中方法
            }
            catch (System.Runtime.InteropServices.COMException ex)
            {
                
//throw new clsError("Com exception:" + ex.Message, ErrorsOcurred.ComError);
            }

        }

 

  我利用刚刚生成的baidu的CHM导出的word如图:

3
 

  效果还是不错的,呵呵。如果你的CHM文件大的话,导出的时间可能会比较长一些。

  PS:

  1.如果你使用的是office2003或者office2007,需要修改类库项目下的WordClass类下Word方法,因为office2010的

  Microsoft.Office.Interop.Word.ApplicationClass不再提供构造方法,而是提供Microsoft.Office.Interop.Word.Application()接口

  2.如果在转换的工程中,始终没有反应,可以调试下,如果出现这样的错误,“因为没有打开的文档,所以这一命令无效”。

  调试中不会弹出异常,但是将鼠标放到wApp对象中,查看的会发现那样的错误,原因是因为权限不够,可以采用如下方法解决:

  运行dcomcnfg打开组件服务,依次展开"组件服务"->"计算机"->"我的电脑"->"DCOM配置"

  找到"Microsoft Word应用程序",右键打开属性对话框,

  点击"标识"选项卡,点击"标识"标签,选择"交互式用户"(此设置可能对计算机安全存在威胁,如不设置可以解决问题就不设置,点"下列用户",把管理员的用户administrator密码....正确填写进去也行)

  点击"安全"选项卡,依次把"启动和激活权限","访问权限","配置权限",都选择为自定义,然后依次点击它们的编辑,把everyone添加进去,并加入所有的权限...

  OK,解决此问题!

  如果你的office是2010或者你的系统版本较高的话,很有可能遇到这样的问题。我的电脑是windows7+office2010,就遇到了这样的问题。

  3.在反编译和在线生成CHM的时候会生成一些临时文件,如果不及时删掉的话,会造成空间的浪费。我们自己可以写一个简单的删除程序,这个应该很简单,如果不会的,可以参考我以前项目中的代码,http://www.cnblogs.com/alexis/archive/2010/07/03/1770409.html  附源代码

      

0
相关文章