internal byte[] Merge(List <Byte[]> documentsToAppend = null) { DocumentDataSource dds = new DocumentDataSource(); dds.StartingToken = "«"; dds.EndingToken = "»"; foreach (var placeHolder in this.MergeTemplate.MergePair) { dds[placeHolder.PlaceHolder] = placeHolder.Value; } dds["ff0000"] = new ColoredDataItem { Action = ColorAction.Remove }; foreach (var color in this.MergeTemplate.RemoveColor) { dds[color] = new ColoredDataItem { Action = ColorAction.Remove }; } foreach (var color in this.MergeTemplate.LeaveAndRemoveColor) { dds[color] = new ColoredDataItem { Action = ColorAction.LeaveAndRemoveColor }; } using (MemoryStream tempStream = new MemoryStream()) { using (var ms = new MemoryStream()) { MergeTemplate.InputFile.CopyTo(ms); var processedStream = DocumentRenderer.ProcessDocument(ms, dds); if (documentsToAppend != null) { Aspose.Words.Document document = new Document(processedStream); foreach (var docToAppend in documentsToAppend) { Aspose.Words.Document newDoc = new Document(new MemoryStream(docToAppend)); document.AppendDocument(newDoc, ImportFormatMode.KeepSourceFormatting); } document.Save(tempStream, SaveFormat.Docx); } else { processedStream.CopyTo(tempStream); } } return(tempStream.ToArray()); } }