コード例 #1
0
ファイル: SysAttachInfo.cs プロジェクト: sethHome/House
 public SysAttachInfo(SysAttachFileEntity Entity)
 {
     this.ID         = Entity.ID;
     this.Path       = Entity.Path;
     this.Name       = Entity.Name;
     this.Size       = Entity.Size;
     this.UploadDate = Entity.UploadDate;
     this.FileDate   = Entity.FileDate;
     this.Type       = Entity.Type;
     this.UploadUser = Entity.UploadUser;
     this.Extension  = Entity.Extension;
 }
コード例 #2
0
ファイル: MergeTaskService.cs プロジェクト: sethHome/House
        private MergeResult MergeDoc_CS(int ID, int UserID, MergeOption Options)
        {
            var result = new MergeResult()
            {
                IsSuccess      = true,
                ParaIndexCheck = new List <string>()
            };

            var projInfo = _DBContext.ProjectEntity.Find(ID);

            var areas = _IEnum.GetEnumInfo("System4", "region").Items;

            var areaName = areas.FirstOrDefault(a => a.Key == projInfo.Area.ToString()).Text;

            var otherAreaNames = areas.Where(a => a.Key != projInfo.Area.ToString()).Select(a => a.Text);

            var regAreas = string.Format("({0})", string.Join(")|(", otherAreaNames));

            var ids = _DB.GetQuery(c => c.ProjectID == ID).Select(c => c.ID);

            var files = _IObjectAttachService.GetAttachFiles("ProjectCover", ID);
            var cover = files.Count() > 0 ? files.First() : null;

            files = _IObjectAttachService.GetAttachFiles("ProjectAttachLs", ID);
            var attachLs = files.Count() > 0 ? files.First() : null;

            files = _IObjectAttachService.GetAttachFiles("ProjectAttach", ID);
            var attach = files.Count() > 0 ? files.First() : null;

            var attachs = _IObjectAttachService.GetAttachFiles("MergeProjectDoc", ids.ToList());

            if (attachs.Count == 0)
            {
                result.IsSuccess    = false;
                result.ErrorMessage = "项目没有专业文档,无法合并";
                return(result);
            }

            var allNode = new Dictionary <string, List <DocNode> >();

            var _WordMergeService = new WordMergeService(Options);

            foreach (var a in attachs)
            {
                _WordMergeService.SetDocNode(new Document(a.Path), allNode);
            }

            // 创建新的空白文档
            var doc = new Document();

            _WordMergeService.SetDocStyle(doc);

            doc.RemoveAllChildren();
            var section = _WordMergeService.CreateSection(doc);

            doc.Sections.Add(section);

            // 按照章节号对段落排序
            var items = allNode.OrderBy(d => double.Parse(d.Key.Replace("_", "")));

            int index1 = 1, index2 = 0, index3 = 0, index4 = 0;

            // 将排序好的节点插入新的文档中
            foreach (var item in items)
            {
                foreach (var node in item.Value)
                {
                    Node dstNode = doc.ImportNode(node.Node, true, ImportFormatMode.UseDestinationStyles);

                    if (dstNode.NodeType == NodeType.Paragraph)
                    {
                        var para = dstNode as Paragraph;

                        #region 章节序号检查、重设样式

                        if (para.ParagraphFormat.StyleIdentifier == StyleIdentifier.Heading1)
                        {
                            // 清除原先格式,重新设置样式
                            para.ParagraphFormat.ClearFormatting();
                            para.ParagraphFormat.StyleIdentifier = StyleIdentifier.Heading1;

                            if (item.Key.Contains("_"))
                            {
                                result.ParaIndexCheck.Add(string.Format("一级标题序号重复,标题:{0}", para.Range.Text));
                            }
                            else if (int.Parse(item.Key) != index1)
                            {
                                result.ParaIndexCheck.Add(string.Format("一级标题序号错误,标题:{0}", para.Range.Text));
                                index1 = int.Parse(item.Key) + 1;
                            }
                            else
                            {
                                index1++;
                            }

                            index2 = index3 = index4 = 1;
                        }
                        else if (para.ParagraphFormat.StyleIdentifier == StyleIdentifier.Heading2)
                        {
                            // 清除原先格式,重新设置样式
                            para.ParagraphFormat.ClearFormatting();
                            para.ParagraphFormat.StyleIdentifier = StyleIdentifier.Heading2;

                            var index = item.Key.Split('.')[1];

                            if (item.Key.Contains("_"))
                            {
                                result.ParaIndexCheck.Add(string.Format("二级标题序号重复,标题:{0}", para.Range.Text));
                            }
                            else if (int.Parse(index) != index2)
                            {
                                result.ParaIndexCheck.Add(string.Format("二级标题序号错误,标题:{0}", para.Range.Text));
                                index2 = int.Parse(index) + 1;
                            }
                            else
                            {
                                index2++;
                            }

                            index3 = index4 = 1;
                        }
                        else
                        {
                            if (node.IsListNode)
                            {
                                para.ListFormat.ListLevel.StartAt = node.ListValue;
                                para.ListLabel.Font.Bold          = false;
                                para.ListLabel.Font.Size          = 14;
                            }
                            else
                            {
                                // 清除原先格式,重新设置样式
                                para.ParagraphFormat.ClearFormatting();
                                para.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal;

                                var text = para.Range.Text.TrimStart();

                                var m3 = _WordMergeService.ParaReg3.Match(text);
                                var m4 = _WordMergeService.ParaReg4.Match(text);

                                if (m4.Success)
                                {
                                    var index = m4.Value.Split('.')[3];

                                    if (int.Parse(index) != index4)
                                    {
                                        result.ParaIndexCheck.Add(string.Format("四级标题序号错误,标题:{0}", para.Range.Text));

                                        index4 = int.Parse(index) + 1;
                                    }
                                    else
                                    {
                                        index4++;
                                    }
                                }
                                else if (m3.Success)
                                {
                                    var index = m3.Value.Split('.')[2];

                                    if (int.Parse(index) != index3)
                                    {
                                        result.ParaIndexCheck.Add(string.Format("三级标题序号错误,标题:{0}", para.Range.Text));

                                        index3 = int.Parse(index) + 1;
                                    }
                                    else
                                    {
                                        index3++;
                                    }

                                    index4 = 1;
                                }
                            }
                        }

                        #endregion

                        _WordMergeService.SetChapter(item.Key.Replace("_", ""), para);

                        _WordMergeService.SetParaStyle(para);
                    }

                    section.Body.AppendChild(dstNode);
                }
            }

            if (attach != null)
            {
                _WordMergeService.AppendAttachDoc(doc, new Document(attach.Path));
            }

            // 地区检查
            _WordMergeService.CheckArea(doc, areaName, regAreas, result);

            // 禁用内容检查
            _WordMergeService.CheckDisableContent(doc, projInfo.DisableWord, result);

            _WordMergeService.SetTable(doc);

            _WordMergeService.SetImage(doc);

            _WordMergeService.SetPageNumber(doc);

            if (attachLs != null)
            {
                _WordMergeService.AppendDoc(doc, new Document(attachLs.Path));
            }

            _WordMergeService.CreateList(doc);

            var filePath = getFilePath();

            if (cover != null)
            {
                var docCover = new Document(cover.Path);
                docCover.AppendDocument(doc, ImportFormatMode.UseDestinationStyles);
                docCover.Save(filePath);
            }
            else
            {
                doc.Save(filePath);
            }

            FileStream fs = new FileStream(filePath, FileMode.Open);

            var md5Str = Md5.GetMd5Hash(fs);

            var newAttach = new SysAttachFileEntity()
            {
                Md5        = md5Str,
                Extension  = ".docx",
                FileDate   = DateTime.Now,
                Name       = "合并文档.docx",
                Path       = filePath,
                Size       = fs.Length,
                Type       = (int)EnumAttachType.World,
                UploadDate = DateTime.Now,
                UploadUser = UserID
            };

            fs.Close();

            _IFileService.Add(newAttach);

            _IObjectAttachService.Add(new ObjectAttachEntity()
            {
                AttachID  = newAttach.ID,
                ObjectID  = ID,
                ObjectKey = "MergeProjectDocResult"
            });
            result.Attach = newAttach;

            return(result);
        }