451 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			451 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			C#
		
	
	
	
| 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
 | ||
| {
 | ||
|     /// <summary>
 | ||
|     /// word文档操作辅助类
 | ||
|     /// </summary>
 | ||
|     public class AsposeWordHelper
 | ||
|     {
 | ||
|         /// <summary>
 | ||
|         /// Word
 | ||
|         /// </summary>
 | ||
|         private Document wordDoc;
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 基于模版新建Word文件
 | ||
|         /// </summary>
 | ||
|         /// <param name="path">模板路径</param>
 | ||
|         public void OpenTempelte(string path)
 | ||
|         {
 | ||
|             wordDoc = new Document(path);
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 书签赋值用法
 | ||
|         /// </summary>
 | ||
|         /// <param name="LabelId">书签名</param>
 | ||
|         /// <param name="Content">内容</param>
 | ||
|         public void WriteBookMark(string LabelId, string Content)
 | ||
|         {
 | ||
|             if (wordDoc.Range.Bookmarks[LabelId] != null)
 | ||
|             {
 | ||
|                 wordDoc.Range.Bookmarks[LabelId].Text = Content;
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 列表赋值用法
 | ||
|         /// </summary>
 | ||
|         /// <param name="dt"></param>
 | ||
|         public void WriteTable(System.Data.DataTable dt)
 | ||
|         {
 | ||
|             wordDoc.MailMerge.ExecuteWithRegions(dt);
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 文本域赋值用法
 | ||
|         /// </summary>
 | ||
|         /// <param name="fieldNames">key</param>
 | ||
|         /// <param name="fieldValues">value</param>
 | ||
|         public void Executefield(string[] fieldNames, object[] fieldValues)
 | ||
|         {
 | ||
|             wordDoc.MailMerge.Execute(fieldNames, fieldValues);
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// Pdf文件保存
 | ||
|         /// </summary>
 | ||
|         /// <param name="filename">文件路径+文件名</param>
 | ||
|         public void SavePdf(string filename)
 | ||
|         {
 | ||
|             wordDoc.Save(filename, SaveFormat.Pdf);
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// Doc文件保存
 | ||
|         /// </summary>
 | ||
|         /// <param name="filename">文件路径+文件名</param>
 | ||
|         public void SaveDoc(string filename)
 | ||
|         {
 | ||
|             wordDoc.Save(filename, SaveFormat.Doc);
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 不可编辑受保护,需输入密码
 | ||
|         /// </summary>
 | ||
|         /// <param name="pwd">密码</param>
 | ||
|         public void NoEdit(string pwd)
 | ||
|         {
 | ||
|             wordDoc.Protect(ProtectionType.ReadOnly, pwd);
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 只读
 | ||
|         /// </summary>
 | ||
|         public void ReadOnly()
 | ||
|         {
 | ||
|             wordDoc.Protect(ProtectionType.ReadOnly);
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 通过流导出word文件
 | ||
|         /// </summary>
 | ||
|         /// <param name="stream">流</param>
 | ||
|         /// <param name="fileName">文件名</param>
 | ||
|         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;
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 通过流导出pdf文件
 | ||
|         /// </summary>
 | ||
|         /// <param name="stream">流</param>
 | ||
|         /// <param name="fileName">文件名</param>
 | ||
|         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();
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// html代码转word
 | ||
|         /// </summary>
 | ||
|         /// <param name="Html">html代码</param>
 | ||
|         /// <param name="path">保存路径</param>
 | ||
|         public static void HtmlIntoWord(string Html,string path)
 | ||
|         {
 | ||
| 
 | ||
|             StringBuilder sb = new StringBuilder();
 | ||
|             sb.Append(
 | ||
|                 "<html xmlns:v=\"urn:schemas-microsoft-com:vml\"  xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:w=\"urn:schemas-microsoft-com:office:word\" xmlns:m=\"http://schemas.microsoft.com/office/2004/12/omml\"xmlns = \"http://www.w3.org/TR/REC-html40\">");
 | ||
|             sb.Append(Html);
 | ||
|             sb.Append("</html>");
 | ||
|             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
 | ||
|         /// <summary>
 | ||
|         /// 预览Excel
 | ||
|         /// </summary>
 | ||
|             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, @"<meta[^>]*>", "<meta http-equiv=Content-Type content='text/html; charset=gb2312'>", 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)
 | ||
|             {
 | ||
|               
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|     }
 | ||
| }
 |