/// <summary> /// 增加页面 /// </summary> /// <param name="bookid"></param> /// <param name="userid"></param> /// <param name="pagecount"></param> /// <returns></returns> public ActionResult AddBookPage(int bookid, int userid, int pagecount) { try { Inpinke_Book book = DBBookBLL.GetBookByID(bookid); if (book == null) { return(Content("{\"success\":false,\"msg\":\"添加书本页面失败,刷新页面再试试吧!\"}")); } if (book.PageCount >= pagecount) { return(Content("{\"success\":false,\"msg\":\"添加书本页面失败,刷新页面再试试吧!\"}")); } Inpinke_Book_Page bookpage = DBBookBLL.GetBookPageByPNum(book.PageCount, bookid); if (bookpage != null) { bookpage.PageData.SetAttributeValue("opnum", book.PageCount + "_" + (book.PageCount + 1)); bookpage.PageData = XElement.Parse(bookpage.PageData.ToString()); bookpage.SaveWhenSubmit(InpinkeDataContext.Instance); } book.PageCount = pagecount; book.SaveWhenSubmit(InpinkeDataContext.Instance); InpinkeDataContext.Instance.Submit(); return(Content("{\"success\":true,\"msg\":\"添加书本页面成功!\"}")); } catch (Exception ex) { Logger.Error(string.Format("AddBookPage Error:{0},BookID:{1},UserID:{2},PageCount:{3}", ex.ToString(), bookid, userid, pagecount)); return(Content("{\"success\":false,\"msg\":\"添加书本页面失败,刷新页面再试试吧!\"}")); } }
/// <summary> /// 添加新页面 /// </summary> /// <param name="page"></param> /// <returns></returns> public static BaseResponse AddBookPage(Inpinke_Book_Page page) { BaseResponse br = new BaseResponse(); br.IsSuccess = false; try { page.CreateTime = DateTime.Now; page.UpdateTime = DateTime.Now; page.Status = (int)RecordStatus.Nomral; page.InsertWhenSubmit(InpinkeDataContext.Instance); InpinkeDataContext.Instance.Submit(); br.IsSuccess = true; br.ResponseObj = page; br.Message = "添加页面成功"; return(br); } catch (Exception ex) { Logger.Error(string.Format("AddBookPage BookID:{0},PageNum:{1},Error:{2}", page.BookID, page.PageNum, ex.ToString())); br.IsSuccess = false; br.Message = "添加页面失败请稍后再试"; return(br); } }
/// <summary> /// 删除书本页面 /// </summary> /// <param name="model"></param> /// <returns></returns> public static BaseResponse DeleteBookPage(Inpinke_Book_Page model) { BaseResponse br = new BaseResponse(); br.IsSuccess = false; try { model.PageStatus = (int)PageStatus.Delete; model.UpdateTime = DateTime.Now; model.SaveWhenSubmit(InpinkeDataContext.Instance); InpinkeDataContext.Instance.Submit(); br.IsSuccess = true; br.Message = "书本信息更新成功"; } catch (Exception ex) { br.IsSuccess = false; br.Message = "书本信息更新失败,请稍后再试"; Logger.Error(string.Format("DeleteBookPage Error:{0},BookID:{1}", ex.ToString(), model.ID)); } return(br); }
/// <summary> /// 保存页面内容 /// </summary> /// <param name="bookid"></param> /// <param name="userid"></param> /// <param name="pagedata"></param> /// <returns></returns> public ActionResult SavePageData(int bookid, int userid, string pdata) { try { Inpinke_Book model = DBBookBLL.GetBookByID(bookid); PageDataObjs pageObjs = (PageDataObjs)JsonConvert.DeserializeObject(pdata, typeof(PageDataObjs)); if (pageObjs == null) { return(Content("{\"success\":false,\"msg\":\"保存失败,内容为空\"}")); } if (model.BookStauts == (int)BookStatus.Making) { return(Content("{\"success\":false,\"msg\":\"对不起当前印品已下单印制不能再编辑。\"}")); } string strReturn = "{\"success\":true,\"pviews\":["; string noneused = ""; string usedimgs = ""; List <int> noneUseImage = new List <int>(); List <int> usedimg = new List <int>(); foreach (PageDataObj pageObj in pageObjs.pdatas) { int pnum = pageObj.pagenum; Inpinke_Book_Page bookPage = DBBookBLL.GetBookPageByPNum(pnum, bookid); XElement root = new XElement("layout", new XAttribute("pnum", pnum), new XAttribute("styleid", pageObj.styleid), new XAttribute("isskip", pageObj.isskip), new XAttribute("opnum", pageObj.opagenum), new XAttribute("bgcolor", pageObj.bgcolor)); bool isCreate = false; if (bookPage == null) { bookPage = new Inpinke_Book_Page() { BookID = bookid, PageNum = pnum }; isCreate = true; } else { //原页面不是跨页,现在是跨页的,需要删除掉一个原页面 if (!bookPage.IsSkip && pageObj.isskip.ToLower() == "true" && pageObj.opagenum != "-1_0") { int opnum = int.Parse(pageObj.opagenum.Replace(pnum + "_", "")); Inpinke_Book_Page oBookPage = DBBookBLL.GetBookPageByPNum(opnum, bookid); if (oBookPage != null) { oBookPage.PageStatus = (int)PageStatus.Delete; DBBookBLL.UpdateBookPage(oBookPage); //修改页面图片使用次数 DBImageBLL.ChangeImageUsedNum(oBookPage.PageData, bookid, true, ref noneUseImage); } } //修改页面图片使用次数 DBImageBLL.ChangeImageUsedNum(bookPage.PageData, bookid, true, ref noneUseImage); } bookPage.IsSkip = pageObj.isskip.ToLower() == "false" ? false : true; //添加图片节点 foreach (PageImage image in pageObj.image) { XElement imageItem = new XElement("image"); PropertyInfo[] pis = image.GetType().GetProperties(); int urlIndex = image.src.ToLower().IndexOf("/userfile"); if (urlIndex > 0) { image.src = image.src.Substring(urlIndex); } foreach (PropertyInfo property in pis) { //设置节点属性 imageItem.SetAttributeValue(property.Name, property.GetValue(image, null)); } root.Add(imageItem); } //添加文字节点 foreach (PageText text in pageObj.text) { XElement textItem = new XElement("text"); PropertyInfo[] pis = text.GetType().GetProperties(); foreach (PropertyInfo property in pis) { //设置节点属性 textItem.SetAttributeValue(property.Name, property.GetValue(text, null)); } if (pageObj.pagenum == 0 && text.issingle == "true") { if (!string.IsNullOrEmpty(text.content) && text.conid == "txt_1") { model.BookName = text.content; } if (!string.IsNullOrEmpty(text.content) && text.conid == "txt_2") { model.SubBookName = text.content; } } root.Add(textItem); } bookPage.PageData = root; //修改页面图片使用次数 DBImageBLL.ChangeImageUsedNum(bookPage.PageData, bookid, false, ref usedimg); bool istxtO = false; //文字是否过多 if (isCreate) { int pID = DBBookBLL.GetMaxBookPageID() + 1; bookPage.PageImg = SavePageView(pageObj, userid, model, ref istxtO, pID); } else { bookPage.PageImg = SavePageView(pageObj, userid, model, ref istxtO, bookPage.ID); } strReturn += "{\"pnum\":" + pageObj.pagenum + ",\"src\":\"" + bookPage.PageImg + "\",\"isskip\":" + pageObj.isskip + ",\"istxtover\":" + istxtO.ToString().ToLower() + "},"; bookPage.PageStatus = (int)PageStatus.Normal; if (pageObj.pagenum == 0) { model.BookCover = "/UserFile/" + UserSession.CurrentUser.ID + "/" + bookid + "/cover200.jpg"; } if (isCreate) { DBBookBLL.AddBookPage(bookPage); //更新已完成的页数 DBBookBLL.UpdateDonePage(bookid); } else { DBBookBLL.UpdateBookPage(bookPage); } } noneused = string.Join(",", noneUseImage); usedimgs = string.Join(",", usedimg); strReturn = strReturn.TrimEnd(',') + "],\"noneusedimg\":[" + noneused + "],\"usedimg\":[" + usedimgs + "]}"; return(Content(strReturn)); } catch (Exception ex) { Logger.Error(string.Format("SavePageData BookID:{0},UserID:{1},Error:{2}", bookid, userid, ex.ToString())); return(Content("{\"success\":false,\"msg\":\"服务器异常保存失败,请稍后再试\"}")); } }
/// <summary> /// 调整书本顺序 /// </summary> /// <param name="bookid"></param> /// <param name="userid"></param> /// <param name="numorder"></param> /// <returns></returns> public ActionResult SetPageNumOrder(int bookid, int userid, string numorder, string delpnum) { try { string[] delpnums = delpnum.Split(','); string[] nums = numorder.Split(','); // list = DBBookBLL.GetBookPageByPNums(delpnums, bookid); Inpinke_Book book = DBBookBLL.GetBookByID(bookid); if (delpnums != null && delpnums.Count() > 0) { book.PageCount = book.PageCount - delpnums.Length; DBBookBLL.UpdateBook(book); DBBookBLL.DeleteBookPage(delpnum, bookid); DBBookBLL.UpdateDonePage(bookid); } IList <Inpinke_Book_Page> list = DBBookBLL.GetBookPageByPNums(nums, bookid); if (list != null) { Hashtable ht = new Hashtable(); foreach (Inpinke_Book_Page p in list) { ht[p.PageNum] = p.ID; } int[] intNums = nums.Where(e => int.Parse(e) >= 0).Select(e => int.Parse(e)).ToArray(); for (int i = 0; i < intNums.Length; i++) { if (ht[intNums[i]] == null) { continue; } Inpinke_Book_Page model = list.Where(e => e.ID == (int)ht[intNums[i]]).FirstOrDefault(); if (model != null) { model.PageNum = i; model.PageData.SetAttributeValue("pnum", i); string opnum = "-1_0"; if (i == 0) { opnum = "-1_0"; } else if (i == 1) { opnum = "-2_1"; } else if (i == intNums.Length - 1) { opnum = i.ToString() + "_-3"; } else if (i % 2 == 0) { opnum = i + "_" + (i + 1); } else { opnum = (i - 1) + "_" + i; } model.PageData.SetAttributeValue("opnum", opnum); model.PageData = XElement.Parse(model.PageData.ToString()); model.SaveWhenSubmit(InpinkeDataContext.Instance); } } } InpinkeDataContext.Instance.Submit(); return(Content("{\"success\":true,\"msg\":\"更新书本信息成功\"}")); } catch (Exception ex) { Logger.Error(string.Format("SetPageNumOrder BookID:{0} Error:{1}", bookid, ex.ToString())); return(Content("{\"success\":false,\"msg\":\"更新书本信息失败,刷新页面再试试吧!\"}")); } }
/// <summary> /// 生成书本pdf /// </summary> /// <param name="bookid"></param> /// <returns></returns> public static bool CreateBookPDF(int bookid) { Inpinke_Book model = DBBookBLL.GetBookByID(bookid); string pdfname = FilterSpecial(model.BookName); pdfname = OutPath + pdfname + "-" + model.ID + "-intime.pdf"; PDFProcessBLL pdfProcess = new PDFProcessBLL(PageWidth + 2 * TrimLineLength, PageHeight + 2 * TrimLineLength, pdfname); try { IList <Inpinke_Book_Page> pages = DBBookBLL.GetBookPage(bookid); pdfProcess.PaintScale = PaintScale; if (pages != null) { pages = pages.OrderBy(e => e.PageNum).ToList(); pdfProcess.doc.Open(); float boneWidth = backboneWidth * model.PageCount; pdfProcess.FlodPageWidth = flodPageWidth; pdfProcess.BackBoneWidth = boneWidth; pdfProcess.SinglePageWidth = PageWidth; pdfProcess.SinglePageHeight = PageHeight; for (int i = 0; i <= model.PageCount; i++) { Inpinke_Book_Page p = pages.Where(e => e.PageNum == i).SingleOrDefault(); if (p == null) { pdfProcess.PageWidth = PageWidth + 2 * TrimLineLength; pdfProcess.PageHeight = PageHeight + 2 * TrimLineLength; pdfProcess.doc.SetPageSize(new iTextSharp.text.Rectangle(pdfProcess.PageWidth, pdfProcess.PageHeight)); pdfProcess.doc.NewPage(); pdfProcess.PaintTirmLine(); } else { float pWidth = PageWidth; if (p.IsSkip) { pWidth = PageWidth * 2; if (i != 0) { i++; } } else if (i != 1 && i != model.PageCount) { pWidth = PageWidth * 2; } if (i == 0) { //封面和封底和折页书脊总宽度 pWidth = PageWidth * 2 + flodPageWidth * 2 + boneWidth; } pdfProcess.PageWidth = pWidth + 2 * TrimLineLength; pdfProcess.PageHeight = PageHeight + 2 * TrimLineLength; pdfProcess.doc.SetPageSize(new iTextSharp.text.Rectangle(pdfProcess.PageWidth, pdfProcess.PageHeight)); pdfProcess.doc.NewPage(); pdfProcess.PaintTirmLine(); PageDataObj pageObj = (PageDataObj)SerializeXmlHelper.DeserializeFromXml(p.PageData, typeof(PageDataObj)); pdfProcess.PaintPage(pageObj, 0); if (!p.IsSkip && i != 1 && i != model.PageCount) { p = pages.Where(e => e.PageNum == i + 1).SingleOrDefault(); if (p != null) { pageObj = (PageDataObj)SerializeXmlHelper.DeserializeFromXml(p.PageData, typeof(PageDataObj)); pdfProcess.PaintPage(pageObj, PageWidth); i++; } } } } pdfProcess.doc.Close(); } return(true); } catch (Exception ex) { pdfProcess.doc.Close(); Logger.Error(string.Format("CreateBookPDF BookID:{0},Error:{1}", bookid, ex.ToString())); return(false); } }