Visual Studio 2012 C#3.5 Web应用程序和Word Interop COM
本文关键字:Word Interop COM 应用程序 Web Studio 2012 C#3 Visual | 更新日期: 2023-09-27 18:25:32
主要问题:HTML5不支持对象标记中的classid。
详细信息:
这是对旧的Visual Studio 2008 C#web应用程序项目的重写。我正在使用Visual Studio 2012 C#.net 3.5重写所有内容。我还在新项目中使用了一个很好的现代响应模板,它使用HTML5、jquery、bootstrap等。这个新应用程序在Chrome、FF中运行良好,但在IE中运行不太好
该web应用程序所做的一件事是通过COM和microsoft互操作调用将数据合并到单词模板文件中。所有这些逻辑都被编译为一个单独的类库项目,并作为.DLL部署到客户端浏览器。
因此,当用户单击页面上的按钮生成word文档时,从服务器返回的页面中会有一个对.DLL的Javascript调用(或多次调用),该调用完成所有工作,并从客户端pc进行调用。.DLL将单词模板文件(somefile.doc)复制到临时位置,在客户端pc上实例化word,并指示Word将一些数据合并到somefile.doc文件中,并将其合并到预定义的书签中(主要是客户信息)。
多年来,这在旧项目/架构中一直运行良好,以下是如何实现它的基础:
somepage.aspx头标签(实际上使用母版页,但为了简单起见…):
<head>
<object id="myWordX" classid="myWordX.dll#namespace.class" name="myWordX" VIEWASTEXT></object>
</head>
调用COM DLL中传递3个值的方法的Javascript函数:
function TestCallJS(param1, param2, param3) {
try {
if (myWordX) {
myWordX.TestCall(param1, param2, param3);
}
}
catch (e) {
alert(GetJSExceptionInfo('TestCall', e));
}
}
构建Javascript块的C#代码,该块将被发送回客户端浏览器以调用上面的Javascript函数:
StringBuilder sbScript = new StringBuilder();
sbScript.Append("<script type='text/javascript'>");
sbScript.AppendFormat("TestCallJS('{0}','{1}', '{2}');", data1, data2, data3);
sbScript.Append("</script>");
Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "test", sbScript.ToString());
如果按照上面的逻辑,当向服务器发出请求时,代码会获取一些数据,使用所需的参数值构建脚本,然后返回到客户端浏览器。当页面加载到浏览器中时,TestCallJS javascript函数调用COM DLL中的TestCall方法,该方法完成所有单词interop的工作。
我遇到的问题是HTML5不喜欢对象标记。如果你在上面看到的标签被放在页面的头标签中,它会抱怨以下内容:
验证(HTML5):元素"object"不能嵌套在元素"head"中。
验证(HTML5):属性"classid"不是元素"object"的有效属性。
它抱怨VIEWASTEXT说它后面需要一个=符号和一个值。
如果我将对象标记移到body标记,它只会抱怨classid和VIEWASTEXT。
我读到classid不再受HTML5支持,那么我该怎么做才能让这个COM对象与HTML5一起工作呢?
谢谢你花时间读这篇文章!我的COM对象中有一个庞大的方法库,用于从客户端pc操作Word文档模板、XML、TIF、XPS、发送电子邮件等。
这个问题似乎没有一个简单的答案。我发现下面是关于添加一个可能有效的自定义mimetype的内容:
如何将ActiveX代码验证为HTML5?
即使HTML5验证器给出错误,对象是否仍然工作?