Example #1
0
        /// <summary>
        /// 根据文章的id 获得文章全部作者,以及这些作者的单位信息,并将这些信息传入模板,获得模板字符串
        /// </summary>
        /// <param name="id">文章id</param>
        /// <returns></returns>
        public ArticleAffiliationAuthorInfo GetArticleAffiliations(int id)
        {
            List <ArticleAffiliationModel> affilicationlist = new List <ArticleAffiliationModel>();
            SCIJournalEntities             db = new SCIJournalEntities();
            //读取具体一篇文章中的所有单位
            List <int> AffiliationIds = db.ArticleAffiliations.Where(m => m.ArticleId == id).Select(m => m.AffiliationId).ToList();

            for (int i = 0; i < AffiliationIds.Count; i++)
            {
                //获得此循环中作者单位的单位id
                int affiliationid = AffiliationIds[i];
                //根据单位id获得单位
                Affiliation a = db.Affiliations.Where(m => m.Id == affiliationid).FirstOrDefault();
                //如果单位存在
                if (a != null)
                {
                    //创建一个文章单位对象
                    ArticleAffiliationModel aam = new ArticleAffiliationModel();

                    aam.ViewId          = i + 1;
                    aam.AffiliationID   = AffiliationIds[i];
                    aam.AffiliationText = a.AffiliationName;
                    //将此次单位循环中的单位信息放入集合中
                    affilicationlist.Add(aam);
                }
            }
            string affilitioninfo = this.RenderPartialViewToString("~/Views/Articles/AffiliationInfo.cshtml", affilicationlist);



            //读取具体一篇文章中的所有 <作者-文章> 关系表数据
            List <ArticleAuthor> aa = db.ArticleAuthors.Where(m => m.ArticleId == id).ToList();

            List <ArticleAffiliationAuthor> aaalist = new List <ArticleAffiliationAuthor>();

            for (int i = 0; i < aa.Count; i++)
            {
                ArticleAffiliationAuthor aaa = new ArticleAffiliationAuthor();
                aaa.AffiliationViewIds = new List <int>();
                //将作者提交的单位进行split
                string[] arr = aa[i].AffiliationIds.Split(',');
                foreach (var item in arr)
                {
                    foreach (var _item in affilicationlist)
                    {
                        if (_item.AffiliationID.ToString() == item)
                        {
                            aaa.AffiliationViewIds.Add(_item.ViewId);//将作者单位存入作者单位集合中
                        }
                    }
                }
                //获得作者的类型,1代表第一作者
                aaa.AuthorType = aa[i].AuthorType;
                if (aa[i].Email != null)
                {
                    aaa.Email = aa[i].Email;
                }
                int authorid = aa[i].AuthorId;

                Author author = db.Authors.Where(m => m.Id == authorid).FirstOrDefault();
                if (author != null)
                {
                    aaa.AuthorName = author.AuthorName;
                }
                aaalist.Add(aaa);
            }
            var ArticleInfo = db.Articles.Where(m => m.Id == id).FirstOrDefault();//此处没有判断是否为空

            string doi           = ArticleInfo.DOI;
            int    iid           = ArticleInfo.IId;                                      //获得期刊id
            string receivedDate  = DateHelper.GetDateEnFormat(ArticleInfo.ReceivedDate); //ArticleInfo.ReceivedDate.ToString();
            string acceptedDate  = DateHelper.GetDateEnFormat(ArticleInfo.AcceptedDate);
            string publishedDate = DateHelper.GetDateEnFormat(ArticleInfo.PublishedDate);

            //页码
            string pageindex = ArticleInfo.PageIndex;


            var IssueOfArticle = db.JournalIssues.Where(m => m.Id == iid).FirstOrDefault();
            int jid            = IssueOfArticle.JId;
            //多少期
            string iname = IssueOfArticle.IName;
            //年份
            string iyear = IssueOfArticle.PublishDate.Year.ToString();

            var JournalOfArticle = db.Journals.Where(m => m.Id == jid).FirstOrDefault();
            //杂志名称
            string jname = JournalOfArticle.JName;



            HeaderInfo hi = new HeaderInfo()
            {
                AAAList       = aaalist,
                Doi           = doi,
                AcceptedDate  = acceptedDate,
                ReceivedDate  = receivedDate,
                PublishedDate = publishedDate,
                Iname         = iname,
                Iyear         = iyear,
                Jname         = jname,
                Pageindex     = pageindex
            };
            string authorinfo = this.RenderPartialViewToString("~/Views/Articles/AuthorInfo.cshtml", hi);
            ArticleAffiliationAuthorInfo aaainfo = new ArticleAffiliationAuthorInfo();

            aaainfo.AuthorInfo      = authorinfo;
            aaainfo.AffiliationInfo = affilitioninfo;
            aaainfo.publishedYear   = iyear;
            return(aaainfo);
        }
Example #2
0
        public void UploadDoc()
        {
            HttpPostedFileBase file          = Request.Files["Filedata"];
            string             fileName      = Path.GetFileName(file.FileName);
            string             fileExt       = Path.GetExtension(fileName);
            string             docxStorePath = HttpContext.Server.MapPath("/Journal/" + fileName);

            if (fileExt == ".docx" || fileExt == ".xml")
            {
                file.SaveAs(docxStorePath);
            }


            //将word中的图片做一下卫生
            PictureOperator     po    = new PictureOperator();
            DocxOperator        docxO = new DocxOperator();
            List <PictureModel> list  = po.OperateDrawing(docxStorePath, "10.1186/s12879-015-1235-y");

            docxO.ReplaceDrawings(docxStorePath, list);



            //获得xslt文件路径
            string xsltPath = Server.MapPath("~/Xslt/TranslateFromDocxStep9b.xslt");

            DocxDocumentTrans ddt = new DocxDocumentTrans(xsltPath, docxStorePath);

            string xmlPath = ddt.CreateXmlAndReturnPath();
            //string xmlPath = @"E:\workspace\20160906\XmlJournal\XJ.Web\Journals\2.xml";


            //根据文档路径获得文档中 标题样式 的样式Id(在docx中,标题的样式叫做title 他的样式Id却经常为a3,a4,类似等等)
            string titleStyleId = new DocxOperator().GetTitleStyleId(docxStorePath);
            ArticleAffiliationAuthorInfo aaaInfo = GetArticleAffiliations(5);

            Processor processor = new Processor();

            // Load the source document.
            //XdmNode input = processor.NewDocumentBuilder().Build(new Uri(docxStorePath));
            XdmNode input = processor.NewDocumentBuilder().Build(new Uri(xmlPath));

            // Create a transformer for the stylesheet.
            XsltTransformer transformer = processor.NewXsltCompiler().Compile(new Uri(xsltPath)).Load();

            // Set the root node of the source document to be the initial context node.
            transformer.InitialContextNode = input;

            transformer.SetParameter(new QName("", "", "titleStyleId"), new XdmAtomicValue(titleStyleId));
            transformer.SetParameter(new QName("", "", "authorInfo"), new XdmAtomicValue(aaaInfo.AuthorInfo));
            transformer.SetParameter(new QName("", "", "affiliationInfo"), new XdmAtomicValue(aaaInfo.AffiliationInfo));
            transformer.SetParameter(new QName("", "", "publishedYear"), new XdmAtomicValue(aaaInfo.publishedYear));

            // BaseOutputUri is only necessary for xsl:result-document.
            transformer.BaseOutputUri = new Uri(xsltPath);



            // Create a serializer.
            Serializer serializer = new Serializer();

            //TextWriter tw = new StreamWriter();
            //serializer.SetOutputWriter(Response.Output);
            //serializer.SetOutputFile(Server.MapPath(@"D:\test.html"));
            serializer.SetOutputFile(@"D:\MyAnswer.txt");



            // Transform the source XML to System.out.
            transformer.Run(serializer);

            string             str = System.IO.File.ReadAllText(@"D:\MyAnswer.txt");
            SCIJournalEntities db  = new SCIJournalEntities();
            var model = db.Articles.Where(m => m.Id == 5).FirstOrDefault();

            model.Html = str;

            db.SaveChanges();
        }