将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
我们可以使用OpenXML
和OpenXmlPowerTools
将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放到你的数据库中是项目中最难的部分。
您有几个工作流程可供选择,但它们是这样的:
-
用户将.Doc保存到.HTML >>用户通过您创建的应用程序将doc上传到数据库>> web app从数据库中提取HTML以显示在网页上
-
用户保存.Doc >>用户上传doc通过您创建的应用程序>>该应用程序即时转换文档然后将HTML插入数据库>> web app从数据库中提取HTML以显示在网页上
-
用户保存并上传.Doc文件到数据库>> web app拉取文档并在网页请求时动态转换
-
等等
不幸的是,无论您选择哪种工作流程,都会陷入困境。 @DaveBish建议使用第三方工具,我完全同意这是处理转换的最佳方式(如果您不要求用户将其文档保存为HTML)。 此外,请注意,当您转换为HTML时,Word文档中的图像可能会出现问题(它们不会保留在生成的文件中,这意味着在Web开发方面为您提供更多/讽刺/乐趣)。
如果你的老板不想为第三方转换器买单,你可以尝试使用Office.Interop命名空间自己处理转换[插入关于这是一个可怕的想法的等等等等等等等等] …在哪种情况下, 这个答案可能会对你有很大帮助。
您还可以通过Free Spire.Doc获得更多支持