从HTML创建Word文档

时间:2012-02-28 01:19:35

标签: c# html asp.net-mvc-3 ms-word download

我知道关于此主题还有很多其他问题,但我需要更多信息。这是我的要求的两部分问题:从HTML动态生成MS Word文档并提示下载。

Q1)从我正在阅读的内容来看,似乎Microsoft.Office.Interop并非设计用于服务器自动化,因为这只是应用程序的包装器,需要Office要安装在Web服务器上。它是否正确?

我已经得到了一些这样的工作,我得到提示下载,Word文档正确保存,但文档显示我的标记作为文档的内容,而不是呈现的HTML作为内容。根据我所阅读的内容,可以将HTML直接导出到MS Word,而无需使用第三方工具或组件。我还想避免使用Open XML格式,因为我无法保证我的用户拥有哪个版本的Word。

Q2)为了让我的HTML在MS Word输出文件中呈现呈现,我在这里缺少什么? doc.DocumentBodystring类型,包含整个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;
    }

3 个答案:

答案 0 :(得分:3)

我使用了与您相同的代码来下载html作为word文档,并且它工作正常。我修改了我的代码,以便它与你的代码一样进行测试,它仍然可以正常工作,所以我想知道问题是否真的与你的HTML有关。

在调试器中查看doc.DocumentBody,看看它是否是有效的html。

是否包含在<html><body></body></html>

我有一个测试 - 我想如果你遗漏了body标签,你最终会看到原始的HTML。

答案 1 :(得分:2)

  1. 是的,在没有用户界面的服务器上运行Office应用程序不支持。 (注意:“不支持”并不意味着它不起作用,但根本不保证任何形式)。

  2. 使用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更加可行。