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

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

经过一段时间的尝试让我在弹出窗口或灯箱中显示word文档后,他不得不删除将其转换为HTML的单词内容,将其保存在数据库中,然后在网页上将其显示为HTML 。

你们可以给我一些好的弹药,如果显示word文件更好(不那么繁琐,更少的存储空间更安全等)。

或者,如果将单词文档转换为HTML方式很容易让我这样做。

我目前拥有的技术是entity framework,LINQ,MVC,C#,Razor。

我们目前使用HTmlAgilityPack,但这会删除所有格式,并且不允许文档显示得很好。

我们使用http://www.aspose.com/ (我认为我们使用的是Aspose词)来执行类似的任务,并且它工作得很好。 (涉及成本)

我建议转换为HTML会给文档带来最糟糕的再现。 我们使用的一个解决方案是生成文档的Jpeg图像并显示它。

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

如果您使用的是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自动化服务http://blogs.office.com/b/microsoft-word/archive/2009/12/16/word-automation-services_3a00_-what-it-does.aspx

我们可以使用OpenXMLOpenXmlPowerTools将Word文档转换为HTML。

安装必需的包

Install-Package DocumentFormat.OpenXml

Install-Package OpenXmlPowerTools

添加参考

右键单击解决方案资源管理器中的Project
然后Add >> Reference >> Select System.Drawing and WindowsBase

按照下面的代码

使用DocumentFormat.OpenXml.Packaging;
使用OpenXmlPowerTools;
使用系统;
使用System.Collections.Generic;
使用System.IO;
使用System.Linq;
使用System.Text;
使用System.Threading.Tasks;
使用System.Xml.Linq;
使用System.Drawing.Imaging;

命名空间WordToHTML
 {
    课程
     {
         static void Main(string [] args)
         {
             byte [] byteArray = File.ReadAllBytes(“kk.docx”);

            使用(MemoryStream memoryStream = new MemoryStream())
             {
                 memoryStream.Write(byteArray,0,byteArray.Length);
                使用(WordprocessingDocument doc = WordprocessingDocument.Open(memoryStream,true))
                 {
                     int imageCounter = 0;
                     HtmlConverterSettings settings = new HtmlConverterSettings()
                     {
                         PageTitle =“我的页面标题”,
                         ImageHandler = imageInfo =>
                         {
                             DirectoryInfo localDirInfo = new DirectoryInfo(“img”);
                             if(!localDirInfo.Exists)
                                 localDirInfo.Create();
                             ++ imageCounter;
                             string extension = imageInfo.ContentType.Split('/')[1] .ToLower();
                             ImageFormat imageFormat = null;
                             if(extension ==“png”)
                             {
                                 extension =“gif”;
                                 imageFormat = ImageFormat.Gif;
                             }
                            否则if(extension ==“gif”)
                                 imageFormat = ImageFormat.Gif;
                            否则if(extension ==“bmp”)
                                 imageFormat = ImageFormat.Bmp;
                            否则if(extension ==“jpeg”)
                                 imageFormat = ImageFormat.Jpeg;
                            否则if(extension ==“tiff”)
                             {
                                 extension =“gif”;
                                 imageFormat = ImageFormat.Gif;
                             }
                            否则if(extension ==“x-wmf”)
                             {
                                 extension =“wmf”;
                                 imageFormat = ImageFormat.Wmf;
                             }
                             if(imageFormat == null)
                                 return null;

                             string imageFileName =“img / image”+
                                 imageCounter.ToString()+“。”  +扩展;
                            尝试
                             {
                                 imageInfo.Bitmap.Save(imageFileName,imageFormat);
                             }
                             catch(System.Runtime.InteropServices.ExternalException)
                             {
                                 return null;
                             }
                             XElement img = new XElement(Xhtml.img,
                                 new XAttribute(NoNamespace.src,imageFileName),
                                 imageInfo.ImgStyleAttribute,
                                 imageInfo.AltText!= null?
                                     new XAttribute(NoNamespace.alt,imageInfo.AltText):null);
                            返回img;
                         }
                     };
                     XElement html = HtmlConverter.ConvertToHtml(doc,settings);
                     File.WriteAllText(“kk.html”,html.ToStringNewLineOnAttributes());
                 };
             }
         }
     }
 }

如果你的老板在用HTML显示它时已经死定了,那么将word doc生成的HTML放到你的数据库中是项目中最难的部分。

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

  1. 用户将.Doc保存到.HTML >>用户通过您创建的应用程序将doc上传到数据库>> web app从数据库中提取HTML以显示在网页上

  2. 用户保存.Doc >>用户上传doc通过您创建的应用程序>>该应用程序即时转换文档然后将HTML插入数据库>> web app从数据库中提取HTML以显示在网页上

  3. 用户保存并上传.Doc文件到数据库>> web app拉取文档并在网页请求时动态转换

  4. 等等

不幸的是,无论您选择哪种工作流程,都会陷入困境。 @DaveBish建议使用第三方工具,我完全同意这是处理转换的最佳方式(如果您不要求用户将其文档保存为HTML)。 此外,请注意,当您转换为HTML时,Word文档中的图像可能会出现问题(它们不会保留在生成的文件中,这意味着在Web开发方面为您提供更多/讽刺/乐趣)。

如果你的老板不想为第三方转换器买单,你可以尝试使用Office.Interop命名空间自己处理转换[插入关于这是一个可怕的想法的等等等等等等等等] …在哪种情况下, 这个答案可能会对你有很大帮助。

您还可以通过Free Spire.Doc获得更多支持