从HTML创建Word文档
本文关键字:文档 Word 创建 HTML | 更新日期: 2023-09-27 18:26:03
我知道SO上还有很多关于这个主题的其他问题,但我需要更多信息。对于我的需求,这是一个由两部分组成的问题:从HTML动态生成MSWord文档并提示下载。
Q1)从我所读到的内容来看,Microsoft.Office.Interop
似乎不是为服务器自动化而设计的,因为它只是应用程序的包装,需要在web服务器上安装Office。这是正确的吗?
我已经完成了一些工作,我会被提示下载,Word文档会正确保存,但文档会将我的标记显示为文档的内容,而不是将呈现的HTML显示为内容。根据我所读到的,应该可以像这样将HTML导出到MS Word,而不需要第三方工具或组件。我还想避免使用Open XML格式,因为我不能保证我的用户拥有哪个版本的Word。
Q2)要使HTML显示在MS Word输出文件中,我缺少什么?doc.DocumentBody
是包含整个HTML文档的string
类型。
public FileStreamResult DownloadDocument(string id)
{
/* pseudo-code here to fetch my custom "Document" object from DB */
Document doc = DocumentService.FindById(id);
var fileName = string.Format("{0}.doc", doc.Title);
Response.AddHeader("Content-Disposition", "inline;filename=" + fileName);
return new FileStreamResult(WordStream(doc.DocumentBody), "application/msword");
}
private static Stream WordStream(string body)
{
var ms = new MemoryStream();
byte[] byteInfo = Encoding.ASCII.GetBytes(body);
ms.Write(byteInfo, 0, byteInfo.Length);
ms.Position = 0;
return ms;
}
我使用了与您基本相同的代码来下载html作为word文档,而且效果很好。我修改了我的代码,使其与您的代码相同以进行测试,并且它仍然可以正常工作,所以我想知道问题是否真的与您的HTML有关。
在调试器中查看doc.DocumentBody
,看看它是否是有效的html。
它是用<html><body></body></html>
包装的吗?
我做了一个测试——我想如果你去掉body
标签,你最终会看到原始的html。
-
是,并且不支持在没有UI的服务器上运行Office应用程序。(注意:"不支持"并不意味着它不会起作用,只是没有任何形式的保证)。
-
使用File方法返回文件-http://msdn.microsoft.com/en-us/library/dd505200.aspx,看看这个流行的答案-我如何从MVC控制器中呈现一个下载文件?。
Microsoft.Office.Interop不是为服务器自动化而设计的,因为它只是应用程序的包装,需要在web服务器上安装Office。这是正确的吗?
是的。
让HTML显示在MS Word输出文件中,我缺少什么?
当然,你需要创建一个Word文档!Word的文件格式和HTML文件格式不同。
有一些非常好的商业库提供了一个很好的API,用于以编程方式生成Office文档。对于Office XML,这并不是必要的——现在生成Word知道如何读取的XML变得更加可行。