【问题标题】:Creating a Word document from HTML从 HTML 创建 Word 文档
【发布时间】:2012-02-28 01:19:35
【问题描述】:

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

Q1) 从我读到的内容看来,Microsoft.Office.Interop 似乎不是为服务器自动化而设计的,因为这只是应用程序的包装,需要安装 Office网络服务器。它是否正确?

我已经完成了其中的一些工作,系统提示我下载,Word 文档正确保存,但文档将我的标记显示为文档的内容,而不是呈现的 HTML 作为内容。从我所读到的,应该可以像这样简单地将 HTML 导出到 MS Word,而不需要 3rd 方工具或组件。我还想避免使用 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;
    }

【问题讨论】:

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


    【解决方案1】:

    我使用与您基本相同的代码将 html 下载为 word 文档,并且运行良好。我修改了我的代码,使它与你的测试代码相同,它仍然可以正常工作,所以我想知道问题是否真的出在你的 HTML 上。

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

    是否包裹在<html><body></body></html>中?

    我进行了测试 - 我认为如果您忽略 body 标记,您最终会看到原始 html。

    【讨论】:

    • 呸!你完全正确。我的 doc.DocumentBody 是 HTML,但没有被 <html><body> 标签包围。
    【解决方案2】:
    1. 是的,并且不支持在没有 UI 的服务器上运行 Office 应用程序。 (注意:“不支持”并不意味着它不起作用,只是不做任何形式的保证)。

    2. 使用 File 方法返回文件 - http://msdn.microsoft.com/en-us/library/dd505200.aspx,查看这个热门答案 - How can I present a file for download from an MVC controller?

    【讨论】:

    • 它表明从控制器返回File 会返回我已经在使用的FileStreamResult。问题不在于文件没有下载,它确实如此。问题是内容是实际的 HTML 标记,而不是 HTML 的呈现版本。
    • 您发送文件的代码感觉不对 - 当您按原样发送整个文档时,不应将字符串转换为字节数组(也可能是正确的代码......)。我假设“doc”是您尝试向下发送的 Word 文档,但在重新阅读后,您似乎还没有 Word 文档——只是您假装作为 Word 文档流式传输的 HTML。尝试指定“nosniff”标头(stackoverflow.com/search?q=nosniff),这可能会强制您的 HTML 被 Word 打开。
    【解决方案3】:

    Microsoft.Office.Interop 不是为服务器自动化而设计的,因为它只是应用程序的包装,需要在 Web 服务器上安装 Office。这是正确的吗?

    是的。

    为了让我的 HTML 出现在 MS Word 输出文件中,我缺少什么?

    当然,您需要创建一个 Word 文档! Word 的文件格式和 HTML 文件格式不同。

    那里有一些非常好的商业库,它们提供了一个很好的 API,用于以编程方式生成 Office 文档。使用 Office XML,这不是相当必要的 - 现在generate the XML that Word knows how to read 更可行。

    【讨论】:

    • 是的,正如我所提到的,我希望避免走 XML 路线。也希望避免为商业许可付出高昂的代价,尽管 Aspose.Words 看起来非常不可思议,只是非常昂贵。
    • 我还看到几个例子,用户说可以像这样将 HTML 导入 Word,但我还没有运气。
    • @MaseBase 可能没那么糟糕。你确定会痛吗?尝试将这些 HTML 字符串之一粘贴到 Word 中,保存它,解压缩 docx 并检查源代码。您可能会发现 80% 的案例都有一个可以遵循的简单模板。是的,Aspose 非常强大且易于使用。我在过去的项目中使用它来生成带有图形和图表的 Excel 电子表格。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多