作者主页
using System; using System.IO; using Microsoft.HtmlTrans;
namespace ToHtmlLibrary.Core { /// <summary> /// 把Office文档转换成html文档 /// </summary> public class TransToHtml { #region Field private string m_SavedHtmlFileName; private string m_SavedPhysicalPath; private string m_ServiceUrl; #endregion #region Property public string SavedHtmlFileName { get { return m_SavedHtmlFileName; } set { m_SavedHtmlFileName = value; } } public string SavedPhysicalPath { get { return m_SavedPhysicalPath; } set { m_SavedPhysicalPath = value; } } public string ServiceUrl { set { m_ServiceUrl = value; } get { return m_ServiceUrl; } } #endregion #region Constructor public TransToHtml() { } /// <summary> /// /// </summary> /// <param name="savePath">转换成的html文件存放的物理路径</param> /// <param name="mainFileName">html文件的文件名(不包括扩展名)</param> public TransToHtml(string savePath,string mainFileName) { SavedPhysicalPath = savePath; SavedHtmlFileName = mainFileName; } /// <summary> /// /// </summary> /// <param name="savePath"></param> /// <param name="mainFileName"></param> /// <param name="serviceUrl">转换remoting服务的url</param> public TransToHtml(string savePath,string mainFileName,string serviceUrl) { SavedPhysicalPath = savePath; SavedHtmlFileName = mainFileName; ServiceUrl = serviceUrl; } #endregion #region Private Method private string GetVirtualDocumentName(EDocumentType type) { if(type.Equals(EDocumentType.Word)) return "abc.doc"; if(type.Equals(EDocumentType.Excel)) return "abc.xls"; if(type.Equals(EDocumentType.PowerPoint)) return "abc.ppt"; return ""; } private void DoTrans(byte[] docContent,string serviceUrl ,EDocumentType type) { if (type.Equals(EDocumentType.Unknow)) { return ; } string strTask = Guid.NewGuid().ToString(); string strDocument = GetVirtualDocumentName(type); //创建IHtmlTrLoadBalancer对象 IHtmlTrLoadBalancer htmlTrLoadBalancer = (IHtmlTrLoadBalancer)System.Activator.GetObject( typeof(IHtmlTrLoadBalancer), serviceUrl); //获取IHtmlTrLauncher对象的URI string strLauncherUri = htmlTrLoadBalancer.StrGetLauncher(strTask); //创建IHtmlTrLauncher对象 IHtmlTrLauncher htmlTrLauncher = (IHtmlTrLauncher) System.Activator.GetObject(typeof(IHtmlTrLauncher), strLauncherUri); //调用IHtmlTrLauncher对象生成html CreateHtmlInfo chi = htmlTrLauncher.CHICreateHtml(strLauncherUri, docContent,BrowserType.BT_IE4, strDocument, strTask, 90, true); //判断IHtmlTrLoadBalancer对象的任务是否完成 htmlTrLoadBalancer.LauncherTaskCompleted(strLauncherUri, strTask); // //检查错误后输出结果 if(chi.ce == CreationErrorType.CE_NONE && chi.fHasMainFile) { Directory.CreateDirectory(SavedPhysicalPath + "\\" + SavedHtmlFileName); FileStream fs = new FileStream(SavedPhysicalPath + "\\" + SavedHtmlFileName + "\\" + SavedHtmlFileName + chi.strMainFileName.Substring(chi.strMainFileName.LastIndexOf(".")),FileMode.Create); BinaryWriter bw = new BinaryWriter(fs); bw.Write(chi.rgbMainFile,0,chi.rgbMainFile.Length); fs.Close(); fs = null; bw.Close(); bw = null; if (chi.fHasThicket) { string supportFilePath = string.Concat(chi.strMainFilePath, chi.strThicketFolderName, "/"); for (int i=0;i<chi.rgrgbThicketFiles.Length;i++) { Directory.CreateDirectory(SavedPhysicalPath + "\\" + SavedHtmlFileName + "\\" + "HtmlView.files"); fs = new FileStream(SavedPhysicalPath + "\\" + SavedHtmlFileName + "\\" + "HtmlView.files" + "\\" + chi.rgstrThicketFileNames[i],FileMode.Create); bw = new BinaryWriter(fs); bw.Write(chi.rgrgbThicketFiles[i],0,chi.rgrgbThicketFiles[i].Length); fs.Close(); fs = null; bw.Close(); bw = null; } } } else { throw new Exception(chi.ce.ToString() ); } } #endregion #region Public Method public void Trans(byte[] docContent,EDocumentType type) { Trans(docContent,ServiceUrl,type); } public void Trans(byte[] docContent,string serviceUrl ,EDocumentType type) { DoTrans(docContent,serviceUrl ,type); } #endregion } }

|