Word转Chm 在线转换应用
大约去年什么时候 ,写一个软件产品的操作手册。写完以后,用户要求提供Chm格式的帮助文档。于是上网查搜索了一翻。有一些客户端转换软件可以使用,不过大都需要注册,而且有些转换错误或是转换不完整。国外有一个软件,下载下来测试了一下,效果还不错,不过注册费用需要300~500美元,那可用不起。于是程序员的本性毕露。化了几天时间,写了一个原型,能够把自己的操作手册从Word格式转换成Chm。
最近国内各大开放平台比较火,比如,腾讯开放平台、百度开放平台、360开放平台等。我有一些朋友也在开放平台上写了一些应用。谈起应用开发,我也想尝试一下开放平台应用开发是怎么回事,于是想把以前写过的Word转Chm的程序拿来偿试一下。
原来写的程序是客户端程序,开放平台的应用一般都是web应用、或是falsh、或是手机应用。把客户端程序改造成web程序,想着简单,实际去做了,才发现不是一般的麻烦,原以为化几天时间就可以完成,没想到化了几周时间才完成,现在终于上线了。有兴趣的朋友可以去测试一下。腾讯开放平台:http://rc.qzone.qq.com/100653271 。
上面说到从客户端转到web出现了一些问题,主要原因是因为程序是使用了Microsoft.Office.Interop.Word 类库来处理Word文档。下面简单介绍一下。
1. Word转Chm原理
Word转Chm原理其实很简单。一般操作手册一类的Word文档,会设置大纲结构,按章节目录进行大纲设置,在Word视图中,显示导航窗格时,可以清楚地看见大纲目录结构。Chm的制作,微软有现成的工具可以使用,其过程也很简单,主要是以下几步:
1) 你准备了很多html,需要把这些html文件生成Chm;
2) 生成一个hhp文件,也叫Chm项目文件,指定了生成Chm的各种参数。
3) 生成一个hhc文件,意思是Chm目录中的项,指向哪个html文件。
4) 生成一个hhk索引文件,在Chm的索引中是显。
5) 调用hhc.exe对上面生成的文件进行编译,就生成了Chm文件。
那所谓Word转Chm,无非是把Word根据大纲结构拆成多个html文件,然后生成上面所讲的几个文件,然后调用hhc生成Chm。
上面所说的过程,需要使用Microsoft.Office.Interop.Word提供的接口,取得大纲结构,调用Word另存为html文件接口,保存为html文件。因为要使用Microsoft.Office.Interop.Word,调用Microsfot Word程序,带来了一些麻烦。
2. 服务器端的Office自动化
原来在客户端写代码时,用户是本地的管理员,调用Word接口,没有任何问题。一旦改成Web方式,则会有很大的问题。
按照微软件的说法是:http://support.microsoft.com/kb/257757
“Microsoft 目前建议不要从任何无人参与的、非交互式客户端应用程序或组件(包括 ASP、DCOM 和 NT Service)中进行 Microsoft Office 应用程序的“自动化”,也不为此提供支持,因为 Office 在这种环境中运行时可能会出现不稳定的现象并且/或者会死锁。”
这就是死穴。上面的链接文档说得很清楚。如果你想在服务器端调用Office自动化功能,它的建议就是不要调用。非要调用,那要解决的问题很多,而且不保证能用。
在调试过程中,主要注意如下问题:
1)?????? 配置服务器端的Word运行环境。
关于这个问题,还是参考上面的文档,在文档有很多链接,告诉你如查配置DCOMCNFG。如果调试发现
连接到服务器失败。错误: 0x80070005
无法打开宏存储
出现“拒绝访问权限”的错误,或者是无法打开宏存储
?????? 等等很多错误,都是配置的问题。
2)?????? 设置asp.net模拟用户
缺省的aps.net用户并没有访问Word的权限,需在设置模拟运行用户,
<identity impersonate="true" userName="someUser" passWord="UserPassWord"/>
3)?????? 多线程运行
客户端是单个用户运行的,web端可以有很多用户时运行,需要设置转换任务在多线程中运行。
4)?????? 排队逻辑
如果有多个用户同运行,而服务器的能力是有限的,需要处理多个用户的排列问题。
5)?????? 守护进程
上面说过,服务器端的自动化会出问题,如果出问题,有可能死机,有可能winword.exe进行不能关闭。所以需要一个守护进程对死的winword.exe进程进行清理。
如果有什么问题可以交流。下面的链接可以在线测试,希望能有所帮助。
http://rc.qzone.qq.com/100653271
?