从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作为word文档,而且效果很好。我修改了我的代码,使其与您的代码相同以进行测试,并且它仍然可以正常工作,所以我想知道问题是否真的与您的HTML有关。

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

它是用<html><body></body></html>包装的吗?

我做了一个测试——我想如果你去掉body标签,你最终会看到原始的html。

  1. 是,并且不支持在没有UI的服务器上运行Office应用程序。(注意:"不支持"并不意味着它不会起作用,只是没有任何形式的保证)。

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