using Aspose.Words; using Microsoft.Office.Interop.Excel; using System; using System.Data; using System.Diagnostics; using System.IO; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Text; namespace BLL { /// /// word文档操作辅助类 /// public class AsposeWordHelper { /// /// Word /// private Document wordDoc; /// /// 基于模版新建Word文件 /// /// 模板路径 public void OpenTempelte(string path) { wordDoc = new Document(path); } /// /// 书签赋值用法 /// /// 书签名 /// 内容 public void WriteBookMark(string LabelId, string Content) { if (wordDoc.Range.Bookmarks[LabelId] != null) { wordDoc.Range.Bookmarks[LabelId].Text = Content; } } /// /// 列表赋值用法 /// /// public void WriteTable(System.Data.DataTable dt) { wordDoc.MailMerge.ExecuteWithRegions(dt); } /// /// 文本域赋值用法 /// /// key /// value public void Executefield(string[] fieldNames, object[] fieldValues) { wordDoc.MailMerge.Execute(fieldNames, fieldValues); } /// /// Pdf文件保存 /// /// 文件路径+文件名 public void SavePdf(string filename) { wordDoc.Save(filename, SaveFormat.Pdf); } /// /// Doc文件保存 /// /// 文件路径+文件名 public void SaveDoc(string filename) { wordDoc.Save(filename, SaveFormat.Doc); } /// /// 不可编辑受保护,需输入密码 /// /// 密码 public void NoEdit(string pwd) { wordDoc.Protect(ProtectionType.ReadOnly, pwd); } /// /// 只读 /// public void ReadOnly() { wordDoc.Protect(ProtectionType.ReadOnly); } /// /// 通过流导出word文件 /// /// 流 /// 文件名 public static HttpResponseMessage ExportWord(Stream stream, string fileName) { var file = stream; fileName += DateTime.Now.ToString("yyyyMMddHHmmss"); HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); result.Content = new StreamContent(file); result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/msword"); result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); result.Content.Headers.ContentDisposition.FileName = fileName + ".doc"; return result; } /// /// 通过流导出pdf文件 /// /// 流 /// 文件名 public static HttpResponseMessage ExportPdf(Stream stream, string fileName) { var file = stream; fileName += DateTime.Now.ToString("yyyyMMddHHmmss"); HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); result.Content = new StreamContent(file); result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf"); result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); result.Content.Headers.ContentDisposition.FileName = fileName + ".pdf"; return result; } public static void InsertImg(Document doc, string rootPath, string BookmarksName, string ManId, string Idea) { Bookmark bookmarkCreateMan = doc.Range.Bookmarks[BookmarksName]; if (bookmarkCreateMan != null) { var user = UserService.GetUserByUserId(ManId); if (user != null) { if (!string.IsNullOrEmpty(user.SignatureUrl)) { var file = user.SignatureUrl; if (!string.IsNullOrWhiteSpace(file)) { string url = rootPath + file; DocumentBuilder builders = new DocumentBuilder(doc); builders.MoveToBookmark(BookmarksName); if (!string.IsNullOrEmpty(url)) { System.Drawing.Size JpgSize; float Wpx; float Hpx; UploadAttachmentService.getJpgSize(url, out JpgSize, out Wpx, out Hpx); double i = 1; i = JpgSize.Width / 50.0; if (File.Exists(url)) { bookmarkCreateMan.Text = Idea; builders.InsertImage(url, JpgSize.Width *1.6/ i, JpgSize.Height * 1.2 / i); } else { bookmarkCreateMan.Text = Idea; bookmarkCreateMan.Text = user.UserName; } } } } else { bookmarkCreateMan.Text = user.UserName; } } } } public static void InsertImg(Document doc, string rootPath, string BookmarksName, string ManId, string Idea,bool IdeaIsCover) { Bookmark bookmarkCreateMan = doc.Range.Bookmarks[BookmarksName]; if (bookmarkCreateMan != null) { var user = UserService.GetUserByUserId(ManId); if (user != null) { if (!string.IsNullOrEmpty(user.SignatureUrl)) { var file = user.SignatureUrl; if (!string.IsNullOrWhiteSpace(file)) { string url = rootPath + file; DocumentBuilder builders = new DocumentBuilder(doc); builders.MoveToBookmark(BookmarksName); if (!string.IsNullOrEmpty(url)) { System.Drawing.Size JpgSize; float Wpx; float Hpx; UploadAttachmentService.getJpgSize(url, out JpgSize, out Wpx, out Hpx); double i = 1; i = JpgSize.Width / 50.0; if (File.Exists(url)) { if (IdeaIsCover) { bookmarkCreateMan.Text += Idea; } else { bookmarkCreateMan.Text = Idea; } builders.InsertImage(url, JpgSize.Width *1.6/ i, JpgSize.Height * 1.2 / i); } else { if (IdeaIsCover) { bookmarkCreateMan.Text += Idea; } else { bookmarkCreateMan.Text = Idea; } bookmarkCreateMan.Text = user.UserName; } } } } else { bookmarkCreateMan.Text = user.UserName; } } } } public static void WordIntoPdf(string wordPath, string pdfPath) { Microsoft.Office.Interop.Word.Application application = new Microsoft.Office.Interop.Word.Application(); Microsoft.Office.Interop.Word.Document document = null; try { application.Visible = false; document = application.Documents.Open(wordPath); document.ExportAsFixedFormat(pdfPath, Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatPDF); } catch (Exception e) { Console.WriteLine(e.Message); } finally { document.Close(); } } /// /// html代码转word /// /// html代码 /// 保存路径 public static void HtmlIntoWord(string Html,string path) { StringBuilder sb = new StringBuilder(); sb.Append( ""); sb.Append(Html); sb.Append(""); var html = sb.ToString();//读取html内容 StreamWriter sw = new StreamWriter(path, false, Encoding.GetEncoding("utf-8")); sw.WriteLine(html); sw.Flush(); sw.Close(); } public static string WordToHtml(object wordFileName) { //在此处放置用户代码以初始化页面 Microsoft.Office.Interop.Word.ApplicationClass word = new Microsoft.Office.Interop.Word.ApplicationClass(); word.Visible = false;//使文档可见(程序运行时,word文档不会闪屏) Type wordType = word.GetType(); Microsoft.Office.Interop.Word.Documents docs = word.Documents; //打开文件 Type docsType = docs.GetType(); //Microsoft.Office.Interop.Word.Document doc = (Microsoft.Office.Interop.Word.Document)docsType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { wordFileName, true, true }); Microsoft.Office.Interop.Word.Document doc = word.Documents.Open(wordFileName); //转换格式,另存为 Type docType = doc.GetType(); string wordSaveFileName = wordFileName.ToString(); string strSaveFileName = wordSaveFileName.Substring(0, wordSaveFileName.LastIndexOf(".")) + ".html"; object saveFileName = (object)strSaveFileName; docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { saveFileName, Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatFilteredHTML }); docType.InvokeMember("Close", System.Reflection.BindingFlags.InvokeMethod, null, doc, null); //退出 Word wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null); return saveFileName.ToString(); } #region 预览Excel /// /// 预览Excel /// public static string PriviewExcel( string inFilePath) { Microsoft.Office.Interop.Excel.Application excel = null; Microsoft.Office.Interop.Excel.Workbook xls = null; excel = new Microsoft.Office.Interop.Excel.Application(); object missing = Type.Missing; object trueObject = true; excel.Visible = false; excel.DisplayAlerts = false; string randomName = DateTime.Now.Ticks.ToString(); //output fileName xls = excel.Workbooks.Open(inFilePath, missing, trueObject, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing); //Save Excel to Html object format = Microsoft.Office.Interop.Excel.XlFileFormat.xlHtml; string htmlName = Path.GetFileNameWithoutExtension(inFilePath) + ".html"; String outputFile = Path.GetDirectoryName(inFilePath) + "\\" + htmlName; Workbook wsCurrent = xls;//(Workbook)wsEnumerator.Current; wsCurrent.SaveAs(outputFile, format, missing, missing, missing, missing, XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing); excel.Quit(); return outputFile; //Open generated Html //Process process = new Process(); //process.StartInfo.UseShellExecute = true; //process.StartInfo.FileName = outputFile; //process.Start(); } #endregion public static string GetPathByDocToHTML(string strFile) { if (string.IsNullOrEmpty(strFile)) { return "0";//没有文件 } Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application() { Visible = false, AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable }; //Microsoft.Office.Interop.Word.ApplicationClass word = new Microsoft.Office.Interop.Word.ApplicationClass(); // word.DisplayAlerts = Microsoft.Office.Interop.Word.WdAlertLevel.wdAlertsNone; Type wordType = word.GetType(); Microsoft.Office.Interop.Word.Documents docs = word.Documents; // 打开文件 Type docsType = docs.GetType(); object fileName = strFile; Microsoft.Office.Interop.Word.Document doc = (Microsoft.Office.Interop.Word.Document)docsType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { fileName, true, true }); // 转换格式,另存为html Type docType = doc.GetType(); //给文件重新起名 string filename = System.DateTime.Now.Year.ToString() + System.DateTime.Now.Month.ToString() + System.DateTime.Now.Day.ToString() + System.DateTime.Now.Hour.ToString() + System.DateTime.Now.Minute.ToString() + System.DateTime.Now.Second.ToString(); string strFileFolder = "/html/"; DateTime dt = DateTime.Now; //以yyyymmdd形式生成子文件夹名 string strFileSubFolder = dt.Year.ToString(); strFileSubFolder += (dt.Month < 10) ? ("0" + dt.Month.ToString()) : dt.Month.ToString(); strFileSubFolder += (dt.Day < 10) ? ("0" + dt.Day.ToString()) : dt.Day.ToString(); string strFilePath = strFileFolder + strFileSubFolder + "/"; // 判断指定目录下是否存在文件夹,如果不存在,则创建 if (!Directory.Exists(strFilePath)) { // 创建up文件夹 Directory.CreateDirectory(strFilePath); } //被转换的html文档保存的位置 // HttpContext.Current.Server.MapPath("html" + strFileSubFolder + filename + ".html") string ConfigPath = strFilePath + filename + ".html"; object saveFileName = ConfigPath; /*下面是Microsoft Word 9 Object Library的写法,如果是10,可能写成: * docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, * null, doc, new object[]{saveFileName, Word.WdSaveFormat.wdFormatFilteredHTML}); * 其它格式: * wdFormatHTML * wdFormatDocument * wdFormatDOSText * wdFormatDOSTextLineBreaks * wdFormatEncodedText * wdFormatRTF * wdFormatTemplate * wdFormatText * wdFormatTextLineBreaks * wdFormatUnicodeText */ docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { saveFileName, Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatFilteredHTML }); //docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, // null, doc, new object[] { saveFileName, Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatFilteredHTML }); //关闭文档 docType.InvokeMember("Close", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { null, null, null }); // 退出 Word wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null); //转到新生成的页面 //return ("/" + filename + ".html"); //转化HTML页面统一编码格式 TransHTMLEncoding(ConfigPath); return (strFilePath + filename + ".html"); } public static void TransHTMLEncoding(string strFilePath) { try { System.IO.StreamReader sr = new System.IO.StreamReader(strFilePath, Encoding.GetEncoding(0)); string html = sr.ReadToEnd(); sr.Close(); html = System.Text.RegularExpressions.Regex.Replace(html, @"]*>", "", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.IO.StreamWriter sw = new System.IO.StreamWriter(strFilePath, false, Encoding.Default); sw.Write(html); sw.Close(); } catch (Exception ex) { } } } }