using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; namespace WeChatServerServices.WeiXin.GenHtml { public class GenHtmlHelper { string AppendSign = ""; #region 模板标签处理 /// /// 模板模型类 /// public class WxTemplateModel { Dictionary _WxTempData = new Dictionary(); public Dictionary WxTempData { get { return _WxTempData; } set { _WxTempData = value; } } List _WxForeach = new List(); public List WxForeach { get { return _WxForeach; } set { _WxForeach = value; } } } /// /// 模板标签处理 /// /// 模板文件 /// 生成文件的数据模型 /// 模板中循环的标签代码块 /// public StringBuilder ReplaceSign(ref StringBuilder sb, WxTemplateModel model, string ForeachTemplate) { StringBuilder s = sb; try { //TempData标签处理 foreach (string key in model.WxTempData.Keys) { sb.Replace("$WxTempData[" + key + "]", model.WxTempData[key]); } string newHtml = ForeachTemplate; newHtml = newHtml.Replace("$WxForeachStart", ""); newHtml = newHtml.Replace("$WxForeachEnd", ""); string tempstr = ""; //Foreach标签处理 if (!string.IsNullOrEmpty(ForeachTemplate)) { foreach (var obj in model.WxForeach) { tempstr += newHtml; var pinfo = obj.GetType().GetProperties(); foreach (var p in pinfo) { string v = string.Format("{0}", p.GetValue(obj)); string r = string.Format("$WxForeach.{0}", p.Name); tempstr = tempstr.Replace(r, v); } } } sb.Replace(ForeachTemplate, tempstr); } catch (Exception ex) { throw ex; } return sb; } /// /// 追加记录(扩展方法) /// /// /// /// /// public StringBuilder AppendExt(ref StringBuilder sb, WxTemplateModel model, string ForeachTemplate) { StringBuilder s = sb; try { string newHtml = ForeachTemplate; newHtml = newHtml.Replace("$WxForeachStart", ""); newHtml = newHtml.Replace("$WxForeachEnd", ""); string tempstr = ""; //Foreach标签处理 if (!string.IsNullOrEmpty(ForeachTemplate)) { foreach (var obj in model.WxForeach) { tempstr += newHtml; var pinfo = obj.GetType().GetProperties(); foreach (var p in pinfo) { string v = string.Format("{0}", p.GetValue(obj)); string r = string.Format("$WxForeach.{0}", p.Name); tempstr = tempstr.Replace(r, v); } } } tempstr += AppendSign; sb.Replace(AppendSign, tempstr); } catch (Exception ex) { throw ex; } return sb; } #endregion #region 读写模板文件 /// /// 获取模板文件 /// /// 模板中循环的标签代码块 /// 模板路径 /// public StringBuilder GetTemplate(out string ForeachTemplate, string path = "") { ForeachTemplate = ""; StringBuilder htmltext = new StringBuilder(); if (string.IsNullOrEmpty(path)) path = System.AppDomain.CurrentDomain.BaseDirectory + "/WeiXin/GenHtml/Template/chatlog.html"; try { using (StreamReader sr = new StreamReader(path)) { //1循环标签开始 int sign = 0; String line; while ((line = sr.ReadLine()) != null) { htmltext.Append(line); if (line.IndexOf("$WxForeachStart") >= 0) sign = 1; if (sign == 1) ForeachTemplate += line; if (line.IndexOf("$WxForeachEnd") >= 0) sign = 0; } sr.Close(); } } catch (Exception ex) { throw ex; } return htmltext; } /// /// 获取已存在的html页面 /// /// /// public StringBuilder GetExtHtml(string path) { StringBuilder htmltext = new StringBuilder(); try { using (StreamReader sr = new StreamReader(path)) { String line; while ((line = sr.ReadLine()) != null) { htmltext.Append(line); } sr.Close(); } } catch (Exception ex) { throw ex; } return htmltext; } /// /// 保存html文伯 /// /// html文件 /// 文件保存路径(根目录下的路径) /// public bool SaveHtmlFile(StringBuilder htmltext, string savePath, int tableMaxtCount) { bool r = false; try { if (string.IsNullOrEmpty(savePath)) throw new Exception("文件路径不能为空!"); var htmlDocument = new HtmlAgilityPack.HtmlDocument(); string htmlstr = htmltext.ToString(); htmlDocument.LoadHtml(htmlstr); var baseInfo = htmlDocument.GetElementbyId("TemplateTableSetMaxCount"); var trs = baseInfo.SelectNodes("tbody/tr"); if (trs != null && trs.Count > tableMaxtCount) { int c = trs.Count; for (int i = 0; i < c - tableMaxtCount; i++) { var delinfo = trs.FirstOrDefault(); trs.Remove(delinfo); htmltext.Replace(delinfo.OuterHtml, ""); //WX.CRM.Common.LogHelper.Info(delinfo.OuterHtml); } } //路径如果不存在则创建路径 string tempPath = savePath.Substring(0, savePath.LastIndexOf('/')); if (!Directory.Exists(tempPath)) { DirectoryInfo directoryInfo = new DirectoryInfo(tempPath); directoryInfo.Create(); } //保存文件 using (StreamWriter sw = new StreamWriter(savePath, false, System.Text.Encoding.GetEncoding("UTF-8"))) { sw.WriteLine(htmltext); sw.Flush(); sw.Close(); } r = true; } catch (Exception ex) { throw ex; } return r; } #endregion } }