C# 将Word转换为HTML,然后在网页上呈现HTML

C# 将Word转换为HTML,然后在网页上呈现HTML,c#,ms-word,C#,Ms Word,我有一个艰难的项目在我的管道中,我不知道从哪里开始。我的老板希望能够在HTML中显示Word文档,并且它看起来与Word文档相同 在一次又一次地尝试让我在弹出窗口或灯箱中显示word文档后,他一直在剥离word的内容,将其转换为HTML,将其保存在数据库中,然后在网页上显示为HTML 你们能不能给我一些好的弹药,看看展示word文档是否更好(不那么麻烦,更少的存储空间,更安全等等) 或者,如果很容易将word文档转换为HTML,我也可以这样做 我目前拥有的技术有实体框架、LINQ、MVC、C#和

我有一个艰难的项目在我的管道中,我不知道从哪里开始。我的老板希望能够在HTML中显示Word文档,并且它看起来与Word文档相同

在一次又一次地尝试让我在弹出窗口或灯箱中显示word文档后,他一直在剥离word的内容,将其转换为HTML,将其保存在数据库中,然后在网页上显示为HTML

你们能不能给我一些好的弹药,看看展示word文档是否更好(不那么麻烦,更少的存储空间,更安全等等)

或者,如果很容易将word文档转换为HTML,我也可以这样做

我目前拥有的技术有实体框架、LINQ、MVC、C#和Razor

我们目前使用的是HTmlAgilityPack,但它去掉了所有格式,不允许文档显示得很好。

我们使用(我认为我们使用的是Aspose words)来执行类似的任务,它工作得很好。(涉及成本)

我建议,转换为HTML会导致文档格式最差。 我们使用的一种解决方案是生成文档的Jpeg图像并显示它


如果您需要能够执行查找和复制/粘贴文本等操作,我建议您将文档转换为.pdf格式,并在客户机安装的标准pdf查看器中以内联方式显示它。

如果您的老板一心想以HTML格式显示它,然后,将word文档生成的HTML放入数据库是项目中最困难的部分

您有几个工作流可供选择,但它们是这样的:

MemoryStream docxStream = null; // Your DOCX file's path or stream.
DocxLoadOptions docxOptions = new DocxLoadOptions();

// Load DOCX file.
DocumentModel document = DocumentModel.Load(docxStream, docxOptions);

MemoryStream htmlStream = new MemoryStream();
HtmlSaveOptions htmlOptions = new HtmlSaveOptions();
htmlOptions.EmbedImages = true;
htmlOptions.HtmlType = HtmlType.HtmlInline;

// Save HTML file.
document.Save(htmlStream, htmlOptions);
  • 用户保存到.Doc到.HTML>>用户通过您创建的应用程序将文档上载到数据库>>web应用程序从数据库中提取HTML以显示在网页上

  • 用户保存.Doc>>用户通过您创建的应用上传文档>>应用动态转换文档,然后将HTML插入数据库>>web应用从数据库提取HTML以显示在网页上

  • 用户保存.Doc文件并将其上载到数据库>>web app会在网页请求时动态提取该文件并将其转换

  • 等等等等等等

  • 不幸的是,不管你选择哪种工作流程,你都有点愚蠢@DaveBish建议使用第三方工具,我完全同意这是处理转换的最佳方式(如果您不要求用户将文档保存为HTML)。另外,请注意,当您转换为HTML时,Word文档中的图像可能会出现问题(它们不会保留在生成的文件中,这意味着在web开发端会有更多的/sarcasm/fun)


    如果您的老板不想为第三方转换器买单,您可以尝试使用Office自己处理转换。Interop命名空间[插入关于这是一个多么糟糕的想法的废话]…在这种情况下,可能对您非常有用。

    如果您使用的是DOCX,您可以一直使用Microsoft的Open XML SDK,它很容易使用和清洁。 取自MSDN的样本

    // This example shows the simplest conversion. No images are converted.
    // A cascading style sheet is not used.
    byte[] byteArray = File.ReadAllBytes("Test.docx");
    using (MemoryStream memoryStream = new MemoryStream())
    {
        memoryStream.Write(byteArray, 0, byteArray.Length);
        using (WordprocessingDocument doc =         WordprocessingDocument.Open(memoryStream, true))
        {
            HtmlConverterSettings settings = new HtmlConverterSettings()
            {
                PageTitle = "My Page Title"
            };
            XElement html = HtmlConverter.ConvertToHtml(doc, settings);
    
            // Note: the XHTML returned by ConvertToHtmlTransform contains objects of type
            // XEntity. PtOpenXmlUtil.cs defines the XEntity class. See
            // http://blogs.msdn.com/ericwhite/archive/2010/01/21/writing-entity-references-using-linq-to-xml.aspx
            // for detailed explanation.
            //
            // If you further transform the XML tree returned by ConvertToHtmlTransform, you
            // must do it correctly, or entities do not serialize properly.
    
            File.WriteAllText("Test.html", html.ToStringNewLineOnAttributes());
        }
    }
    
    您可能还想看看Word automation services

    您也可以通过它获得更多支持

    我使用过,它可以将Word文档中的图像嵌入HTML文件本身。
    例如,像这样:

    MemoryStream docxStream = null; // Your DOCX file's path or stream.
    DocxLoadOptions docxOptions = new DocxLoadOptions();
    
    // Load DOCX file.
    DocumentModel document = DocumentModel.Load(docxStream, docxOptions);
    
    MemoryStream htmlStream = new MemoryStream();
    HtmlSaveOptions htmlOptions = new HtmlSaveOptions();
    htmlOptions.EmbedImages = true;
    htmlOptions.HtmlType = HtmlType.HtmlInline;
    
    // Save HTML file.
    document.Save(htmlStream, htmlOptions);
    
    另外,通过使用
    HtmlType.HtmlInline
    我可以得到一个可以放在现有页面上的HTML内容(比如在查看器或WYSIWYG编辑器中)。查看其余的属性


    您可以在和上找到更多这种方法的示例。

    转换为PDF是最佳选择吗?还有免费的Aspose.Words Express,它能做我需要做的事情吗?或者我需要购买许可证吗?而且每个word文档都有图像,Aspose是否允许我抓取这些图像并将其放入图像文件夹?这取决于-如果输出为pdf格式-它将嵌入图像-图像是处理HTML解决方案的一个非常棘手的部分。我将尝试说服他再次使用pdf。我们看看会怎么样。唉,不,继续说服老板。我会调查的。再次感谢。您可以使用:任务计划、MS WORD宏(用于将.doc保存到.html)和简单批处理文件(用于将文件复制到IIS服务器)这些WORD文档是任意的还是都遵循特定的模式?我看到你在另一条评论中提到所有的文档都有图像。我只是好奇他们是否都遵循特定的模式或模板。@randcd没有遵循任何模式。这是一系列如何编辑由10-30个不同的人创建的文档。在浏览器中编辑docx(或它的某些格式副本,如html)是一项要求吗?@JasonPlutext编辑不是一项要求。他们希望只向特定的人显示它的一部分,并且觉得通过HTML更容易实现这一点,所以只需要在HTML中显示它。这允许我从文件中抓取图像吗?我不能使用任何不在word文档中显示图像的选项。当然,请检查此处的完整示例。您可以查看.mht格式以将图像和所有内容存储在单个文件中。或者干脆拉上拉链。