public void LoadTemplate()
        {
            if (string.IsNullOrEmpty(_TemplatePath))
            {
                return;
            }
            if (!Directory.Exists(_TemplatePath))
            {
                ErrorMessage = "模板路径不存在!";
                return;
            }
            string xmlFilePath = _TemplatePath + "\\Template.xml";

            if (!File.Exists(xmlFilePath))
            {
                ErrorMessage = "模板加载失败!";
                return;
            }
            try
            {
                //加载模板
                XmlDocument docXml = new XmlDocument();
                docXml.Load(xmlFilePath);
                SeatManage.ClassModel.DimensionalTemplate template = SeatManage.ClassModel.DimensionalTemplate.Parse(docXml.OuterXml);
                TemplateName = template.Name;
            }
            catch
            {
                ErrorMessage = "模板加载失败!";
            }
        }
        /// <summary>
        /// 导出
        /// </summary>
        /// <returns></returns>
        public bool Save()
        {
            if (string.IsNullOrEmpty(_SavePath.Trim()))
            {
                ErrorMessage = "保存地址不能为空!";
                return(false);
            }
            if (string.IsNullOrEmpty(_Url.Trim()))
            {
                ErrorMessage = "保存地址不能为空!";
                return(false);
            }
            try
            {
                string schoolno = SeatManage.Bll.Registry.GetSchoolNum();
                string codeURL  = _Url + "?param=";
                string AESCode  = "schoolNo=" + schoolno + "&roomNo={1}&seatNo={0}";
                string savePath = _SavePath + _RoomInfo.No + "_" + _RoomInfo.Name + "\\";
                if (!Directory.Exists(savePath))
                {
                    Directory.CreateDirectory(savePath);
                }
                if (!_IsUseTemplate)
                {
                    //默认
                    foreach (KeyValuePair <string, SeatManage.ClassModel.Seat> seat in _RoomInfo.SeatList.Seats)
                    {
                        Bitmap dCode = QRCode.GetDimensionalCode(codeURL + AESAlgorithm.AESEncrypt(string.Format(AESCode, seat.Value.SeatNo, _RoomInfo.No), "SeatManage_WeiCharCode"), 6, 12, "M");
                        //Bitmap dCode = QRCode.GetDimensionalCode(codeURL + string.Format(AESCode, seat.Value.SeatNo, _RoomInfo.No), 6, 12, "M");
                        Graphics dNum = Graphics.FromImage(dCode);
                        dNum.DrawRectangle(new Pen(Color.White, 60), 165, 165, 60, 60);
                        StringFormat sf = new StringFormat();
                        sf.Alignment = StringAlignment.Center;
                        dNum.DrawString(seat.Value.ShortSeatNo, new Font("黑体", 46, FontStyle.Bold), Brushes.Black, 196, 165, sf);
                        dNum.Save();
                        dCode.Save(savePath + seat.Key + ".jpg", ImageFormat.Jpeg);
                    }
                    return(true);
                }
                if (string.IsNullOrEmpty(_TemplatePath))
                {
                    ErrorMessage = "请选择模板!";
                    return(false);
                }
                if (!Directory.Exists(_TemplatePath))
                {
                    ErrorMessage = "模板路径不存在!";
                    return(false);
                }
                string xmlFilePath = _TemplatePath + "\\Template.xml";
                if (!File.Exists(xmlFilePath))
                {
                    ErrorMessage = "模板加载失败!";
                    return(false);
                }
                //加载模板
                XmlDocument docXml = new XmlDocument();
                docXml.Load(xmlFilePath);
                SeatManage.ClassModel.DimensionalTemplate template = SeatManage.ClassModel.DimensionalTemplate.Parse(docXml.OuterXml);
                int seatCodeCount = template.SeatCodeCount;
                List <SeatManage.ClassModel.DimensionalElement> seatCodeList = template.ElementList.FindAll(u => u.Type == SeatManage.ClassModel.DimensionalElementTye.SeatCode);
                List <SeatManage.ClassModel.DimensionalElement> seatNoList   = template.ElementList.FindAll(u => u.Type == SeatManage.ClassModel.DimensionalElementTye.SeatNo);
                List <SeatManage.ClassModel.DimensionalElement> roomNameList = template.ElementList.FindAll(u => u.Type == SeatManage.ClassModel.DimensionalElementTye.ReadingRoomName);
                List <SeatManage.ClassModel.DimensionalElement> bgList       = template.ElementList.FindAll(u => u.Type == SeatManage.ClassModel.DimensionalElementTye.Background);
                List <SeatManage.ClassModel.DimensionalElement> imageList    = template.ElementList.FindAll(u => u.Type == SeatManage.ClassModel.DimensionalElementTye.Image);
                List <SeatManage.ClassModel.DimensionalElement> textList     = template.ElementList.FindAll(u => u.Type == SeatManage.ClassModel.DimensionalElementTye.Text);

                //整理排序号
                string[] no = _NumOrder.Split(',');
                if (no.Length % seatCodeCount != 0)
                {
                    ErrorMessage = "排序号必须为模板联数的倍数!";
                    return(false);
                }
                List <int> seatOrderNo = new List <int>();
                for (int i = 0; i < no.Length; i++)
                {
                    seatOrderNo.Add(int.Parse(no[i]) - 1);
                }

                List <SeatManage.ClassModel.Seat> seatList = new List <SeatManage.ClassModel.Seat>();
                foreach (KeyValuePair <string, SeatManage.ClassModel.Seat> seat in _RoomInfo.SeatList.Seats)
                {
                    seatList.Add(seat.Value);
                }
                //处理部分导出
                if (_PathSave)
                {
                    string[] num = _OutputNum.Split('-');
                    int      s   = int.Parse(num[0]) - 1;
                    int      e   = int.Parse(num[1]) - 1;
                    if (s < 1)
                    {
                        ErrorMessage = "起始编号必须大于零!";
                        return(false);
                    }
                    if (e > seatList.Count)
                    {
                        ErrorMessage = "结束编号不能大于座位总数!";
                        return(false);
                    }
                    seatList.RemoveRange(0, s);
                    seatList.RemoveRange(e - s + 1, seatList.Count - (e - s + 1));
                }
                Bitmap       image      = null;
                List <Image> seatQRList = new List <Image>();
                for (int i = 0; i < seatList.Count; i++)
                {
                    int seatOrder = (i / seatOrderNo.Count) * seatOrderNo.Count + seatOrderNo[i % seatOrderNo.Count];
                    int seatNo    = i % seatCodeCount;
                    //创建模板
                    if (seatNo == 0)
                    {
                        image = new Bitmap((int)template.Width, (int)template.Height);
                        Graphics bg = Graphics.FromImage(image);
                        //加载背景图片
                        for (int j = 0; j < bgList.Count; j++)
                        {
                            Bitmap   imgB = new Bitmap((int)bgList[j].Width, (int)bgList[j].Height);
                            Graphics ibg  = Graphics.FromImage(imgB);
                            Image    bgi  = Bitmap.FromFile(_TemplatePath + "\\" + bgList[j].ImageFile);
                            if (bgi == null)
                            {
                                ErrorMessage = "背景图片加载失败!";
                                return(false);
                            }
                            ibg.DrawImage(bgi, 0, 0, (int)bgList[j].Width, (int)bgList[j].Height);
                            ibg.Dispose();
                            switch ((int)bgList[j].Angle)
                            {
                            case 90:
                                imgB.RotateFlip(RotateFlipType.Rotate90FlipNone);
                                break;

                            case 180:
                                imgB.RotateFlip(RotateFlipType.Rotate180FlipNone);
                                break;

                            case 270:
                                imgB.RotateFlip(RotateFlipType.Rotate270FlipNone);
                                break;
                            }
                            bg.DrawImage(imgB, (int)bgList[j].PosintionX, (int)bgList[j].PosintionY, (int)bgList[j].Width, (int)bgList[j].Height);
                        }
                        bg.Dispose();
                    }

                    //座位编号二维码
                    Image seatQR = QRCode.GetDimensionalCode(codeURL + AESAlgorithm.AESEncrypt(string.Format(AESCode, seatList[seatOrder].SeatNo, _RoomInfo.No), "SeatManage_WeiCharCode"), 6, 12, "H");
                    switch ((int)seatCodeList[seatNo].Angle)
                    {
                    case 90:
                        seatQR.RotateFlip(RotateFlipType.Rotate90FlipNone);
                        break;

                    case 180:
                        seatQR.RotateFlip(RotateFlipType.Rotate180FlipNone);
                        break;

                    case 270:
                        seatQR.RotateFlip(RotateFlipType.Rotate270FlipNone);
                        break;
                    }
                    Graphics seatg = Graphics.FromImage(image);
                    seatg.DrawImage(seatQR, (int)seatCodeList[seatNo].PosintionX, (int)seatCodeList[seatNo].PosintionY, (int)seatCodeList[seatNo].Width, (int)seatCodeList[seatNo].Height);
                    //座位编号
                    seatg.DrawImage(DrawText(seatNoList[seatNo], seatList[seatOrder].ShortSeatNo), (int)seatNoList[seatNo].PosintionX, (int)seatNoList[seatNo].PosintionY, (int)seatNoList[seatNo].Width, (int)seatNoList[seatNo].Height);
                    seatg.Dispose();
                    if (seatNo == seatCodeCount - 1 || i + 1 == seatList.Count)
                    {
                        Graphics gi = Graphics.FromImage(image);
                        for (int j = 0; j < roomNameList.Count; j++)
                        {
                            gi.DrawImage(DrawText(roomNameList[j], _RoomInfo.Name), (int)roomNameList[j].PosintionX, (int)roomNameList[j].PosintionY, (int)roomNameList[j].Width, (int)roomNameList[j].Height);
                        }
                        for (int j = 0; j < textList.Count; j++)
                        {
                            gi.DrawImage(DrawText(textList[j], textList[j].Text), (int)textList[j].PosintionX, (int)textList[j].PosintionY, (int)textList[j].Width, (int)textList[j].Height);
                        }

                        for (int j = 0; j < imageList.Count; j++)
                        {
                            Image img = Bitmap.FromFile(_TemplatePath + "\\" + imageList[j].ImageFile);
                            if (img == null)
                            {
                                ErrorMessage = "图片加载失败!";
                                return(false);
                            }
                            switch ((int)imageList[j].Angle)
                            {
                            case 90:
                                img.RotateFlip(RotateFlipType.Rotate90FlipNone);
                                break;

                            case 180:
                                img.RotateFlip(RotateFlipType.Rotate180FlipNone);
                                break;

                            case 270:
                                img.RotateFlip(RotateFlipType.Rotate270FlipNone);
                                break;
                            }
                            gi.DrawImage(img, (int)imageList[j].PosintionX, (int)imageList[j].PosintionY, (int)imageList[j].Width, (int)imageList[j].Height);
                        }
                        gi.Dispose();
                        string imageName = "";
                        for (int k = 0; k < seatCodeCount; k++)
                        {
                            int ii    = i - k;
                            int order = (ii / seatOrderNo.Count) * seatOrderNo.Count + seatOrderNo[ii % seatOrderNo.Count];
                            imageName = "_" + seatList[order].ShortSeatNo + imageName;
                        }
                        image.Save(savePath + _RoomInfo.Name + imageName + ".jpg", ImageFormat.Jpeg);
                        image.Dispose();
                    }
                }
                return(true);
            }
            catch (Exception ex)
            {
                ErrorMessage = "导出失败," + ex.Message;
                return(false);
            }
        }