我知道关于此主题还有很多其他问题,但我需要更多信息。这是我的要求的两部分问题:从HTML动态生成MS Word文档并提示下载。
Q1)从我正在阅读的内容来看,似乎Microsoft.Office.Interop
并非设计用于服务器自动化,因为这只是应用程序的包装器,需要Office要安装在Web服务器上。它是否正确?
我已经得到了一些这样的工作,我得到提示下载,Word文档正确保存,但文档显示我的标记作为文档的内容,而不是呈现的HTML作为内容。根据我所阅读的内容,可以将HTML直接导出到MS Word,而无需使用第三方工具或组件。我还想避免使用Open XML格式,因为我无法保证我的用户拥有哪个版本的Word。
Q2)为了让我的HTML在MS Word输出文件中呈现呈现,我在这里缺少什么? doc.DocumentBody
是string
类型,包含整个HTML文档。
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;
}
答案 0 :(得分:3)
我使用了与您相同的代码来下载html作为word文档,并且它工作正常。我修改了我的代码,以便它与你的代码一样进行测试,它仍然可以正常工作,所以我想知道问题是否真的与你的HTML有关。
在调试器中查看doc.DocumentBody
,看看它是否是有效的html。
是否包含在<html><body></body></html>
?
我有一个测试 - 我想如果你遗漏了body
标签,你最终会看到原始的HTML。
答案 1 :(得分:2)
是的,在没有用户界面的服务器上运行Office应用程序不支持。 (注意:“不支持”并不意味着它不起作用,但根本不保证任何形式)。
使用File方法返回文件 - http://msdn.microsoft.com/en-us/library/dd505200.aspx,查看此热门答案 - How can I present a file for download from an MVC controller?。
答案 2 :(得分:2)
Microsoft.Office.Interop并非设计用于服务器自动化,因为它只是应用程序的包装器,需要在Web服务器上安装Office。这是对的吗?
是
我在这里错过了什么来让我的HTML在MS Word输出文件中呈现?
嗯,当然,你需要创建一个Word文档! Word的文件格式和HTML文件格式不同。
有一些非常好的商业库提供了一个很好的API,用于以编程方式生成Office文档。使用Office XML,根据需要,这不是完全 - 现在generate the XML that Word knows how to read更加可行。