public override IDocument Render(IDictionary<string, object> context) { Debug.Assert(context != null); Debug.Assert(this.engine != null); if (context == null) { throw new ArgumentNullException("context"); } //执行主要内容的渲染过程 using (var inStream = new MemoryStream(base.GetBuffer(), false)) using (var reader = new StreamReader(inStream, Encoding.UTF8)) using (var ws = new MemoryStream()) using (var writer = new StreamWriter(ws)) { //执行渲染 this.engine.Evaluate(context, reader, writer); writer.Flush(); ws.Flush(); var resultDoc = new ExcelMLTemplate(); resultDoc.PutBuffer(ws.ToArray()); return resultDoc; } }
internal void LoadFromDocument(ExcelMLTemplate doc) { Debug.Assert(doc != null); var buf = doc.GetBuffer(); var newBuf = new byte[buf.Length]; Buffer.BlockCopy(buf, 0, newBuf, 0, buf.Length); this.PutBuffer(newBuf); }
public static void Compile(ExcelMLTemplate doc) { if (doc == null) { throw new ArgumentNullException("template"); } var xml = doc.GetXmlDocument(); var nsmanager = new ExcelMLNamespaceManager(xml.NameTable); nsmanager.LoadOpenDocumentNamespaces(); ClearTemplate(xml); ProcessPlaceHolders(xml); WriteCompiledMainContent(doc, xml); }
private static void WriteCompiledMainContent(ExcelMLTemplate t, XmlDocument xml) { Debug.Assert(t != null); Debug.Assert(xml != null); using (var ms = new MemoryStream()) using (var writer = new ExcelMLTextWriter(ms)) { writer.Formatting = Formatting.None; //对于 Velocity 模板,最好格式化 xml.WriteTo(writer); writer.Flush(); ms.Flush(); t.PutBuffer(ms.ToArray()); } }