C#实现Word转换PDF时遇到一些问题 - 老有所依

时间:2024-02-21 20:48:39

C#实现Word转换PDF时遇到一些问题

这几天在实现一个word转换pdf功能时遇到一些棘手的问题:
问题1、检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败, 原因是出现以下错误: 80070005 拒绝访问。(异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))。
解决方法一:
a、控制面板-》管理工具-》组件服务-》计算机-》我的电脑-》DCom配置-》找到Microsoft Word文档,单击属性打开此应用程序的属性对话框。
b、单击标识选项卡,然后选择交互式用户。(server2008下不行,后来选择下列用户,并设置服务器帐号和密码就可以了)
c、单击"安全"选项卡,分别在"启动和激活权限"和"访问权限"组中选中"自定义",然后 自定义->编辑->添加ASP.NET账户和IUSER_计算机名(也可以是everyone帐户).

注意:Windows Server2008下有64位DCOM和32位DCOM,在2008系统下需要设置32位DCOM,步骤如下:
1.运行:mmc -32
2.打开“文件”-“添加或删除管理单元”-选择组件服务-点击添加-确定。
3.可以在DCOM组件中找到Microsoft Excel Application了。
然后再根据上面的a、b、c三个步骤完成设置
在Server2008系统IIS7中还需要设置应用程序池的标识属性
找到网站对应的应用程序池-》右键选择“高级设置”-》找到“标识”设置为“NetworkService”或“LocalSystem

如果解决方法一不行的话可以采用
解决方法二:
在web.config的system.web节点中添加<identity impersonate="true" userName="{计算机管理员帐号}" password="{计算机管理员密码"/>

 

问题2、因为此功能尚未安装
解决方法: office2007实现word、excel等转换pdf时,需要安装SaveAsPDFandXPS.exe补丁才可以,而office2010是自带这个功能的,所以不需要再装这个补丁

 

问题3、检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80040154 没有注册类别 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。
解决方法: 没有默认word程序,由于这台服务器先装的是office2003,后装office2007,所以默认了2003,实现转换pdf需要默认2007,只要注册一下默认office2007的winword.exe即可,以下为注册语句:
"C:\Program Files\Microsoft Office\Office12\WINWORD.exe" /regserver


问题4、转换pdf时调用方法ConvertWordToPDF中调用Documents.Open后返回null
解决方法:
a、控制面板-》管理工具-》组件服务-》计算机-》我的电脑-》DCom配置-》找到Microsoft Word文档,单击属性打开此应用程序的属性对话框。
b、单击标识选项卡,然后选择交互式用户。
c、单击"安全"选项卡,在"启动和激活权限"组中选中"自定义",然后 自定义->编辑->添加ASP.NET账户和IUSER_计算机名(也可以只添加everyone帐户).