using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Drawing.Charts; using DocumentFormat.OpenXml.Office2010.PowerPoint; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using PagedList; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; using System.Web.Http; /// /// shuwensController 的摘要描述 /// 0) { qry = qry.Where(x => x.act_num == temp.act_num); } if (!string.IsNullOrEmpty(temp.shuwen_type)) { qry = qry.Where(x => x.shuwen_type == temp.shuwen_type); } return Ok(new { result = "Y", data = qry.Select(x => new { x.act_num, x.shuwen_type, x.shuwen_num, x.contents, x.paper_size, x.direction }).FirstOrDefault() }); } [HttpPost] [Route("api/shuwens/GetShuwenTemplate")] public IHttpActionResult GetShuwenTemplate([FromBody] Model.shuwen_temp temp) { var qry = _db.shuwen_temp.AsQueryable(); if (temp.num > 0) { qry = qry.Where(x => x.num == temp.num); } return Ok(new { result = "Y", data = qry.Select(x => new { x.num, x.shuwen_type, x.name, x.contents }).FirstOrDefault() }); } [HttpPost] [Route("api/shuwens/ListShuwenTemplate")] public IHttpActionResult ListShuwenTemplate([FromBody] Model.shuwen_temp temp) { var qry = _db.shuwen_temp.AsQueryable(); if (temp != null && !string.IsNullOrEmpty(temp.shuwen_type)) { qry = qry.Where(x => x.shuwen_type == temp.shuwen_type); } return Ok(new { result = "Y", data = qry.Select(x => new { x.num, x.shuwen_type, x.name, x.contents }).ToList() }); } [HttpPost] [Route("api/shuwens/SaveActShuwen")] public IHttpActionResult SaveActShuwen([FromBody] Model.activity_shuwen s) { var qry = _db.activity_shuwen.AsQueryable(); qry = qry.Where(x => x.act_num == s.act_num && x.shuwen_type == s.shuwen_type); var d = qry.FirstOrDefault(); if (d != null) { d.contents = s.contents; d.direction = s.direction; d.paper_size = s.paper_size; d.reg_time = DateTime.Now; } else { s.reg_time = DateTime.Now; _db.activity_shuwen.Add(s); } _db.SaveChanges(); return Ok(); } [HttpPost] [Route("api/shuwens/SaveAsShuwenTemplate")] public IHttpActionResult SaveAsShuwenTemplate([FromBody] Model.shuwen_temp t) { if (t.num > 0) {//跑更新 var qry = _db.shuwen_temp.AsQueryable(); qry = qry.Where(x => x.num == t.num); var d = qry.FirstOrDefault(); if (d != null) { d.contents = t.contents; d.name = t.name; d.reg_time = DateTime.Now; } } else { t.reg_time = DateTime.Now; _db.shuwen_temp.Add(t); } _db.SaveChanges(); return Ok(); } [HttpPost] [Route("api/shuwen/RenderShuWenByGong")] public IHttpActionResult RenderShuWenByGong([FromBody] dynamic data) { var jsonData = data; var mode=(string)jsonData.mode; mode = "A"; StringBuilder sb= new StringBuilder(); sb.Append("with gong as (select* from pro_order_detail "); sb.Append("where order_no in (select order_no from pro_order "); sb.Append("where activity_num in (72, 73)) "); sb.Append("and(actItem_num in "); sb.Append("(select item_num from act_bom a "); sb.Append("left join actItem b on a.item_num = b.num "); sb.Append("where a.package_num is null)) "); sb.Append(") "); sb.Append("select * from pro_order_detail a "); sb.Append("where (num in (select num from gong) "); sb.Append("or parent_num in (select num from gong)) "); var list=_db.Database.SqlQuery(sb.ToString()).ToList(); var head_list=list.Where(x=>x.parent_num==null).ToList();//消災,要參數化 var qry = _db.TabletStyleDetail.AsQueryable(); var styles = qry.ToList(); var ret = new object() { }; using (WordprocessingDocument wordDocument = WordprocessingDocument.Create("d://HelloWorld.docx", WordprocessingDocumentType.Document)) { // Add a main document part MainDocumentPart mainPart = wordDocument.AddMainDocumentPart(); mainPart.Document = new Document(); Body body = mainPart.Document.AppendChild(new Body()); List result = new List(); var nowContent = new List(); foreach (var item in head_list) { //消災牌位 var detail_list = list.Where(x => x.parent_num == item.num && x.print_id.Contains("X")).ToList(); foreach (var d in detail_list) { //因為有分身 福德正神 福德夫人這種,所以還要考慮位置關係,才知道 mid right mid_items mid_left的順序 var style=styles.Where(y=>y.StyleID==d.style).ToList(); var leftTitle = style.Where(z => z.ElementID == "lefttitle").FirstOrDefault(); var midTitle = style.Where(z=>z.ElementID=="title1").FirstOrDefault(); var rightTitle = style.Where(z => z.ElementID == "righttitle").FirstOrDefault(); var json = JsonConvert.DeserializeObject(d.f_num_tablet); // 1. 先安全地把 mid_items 轉成 JArray Newtonsoft.Json.Linq.JArray midItemsArray = json.mid_items as Newtonsoft.Json.Linq.JArray; Newtonsoft.Json.Linq.JArray leftItemsArray = json.mid_left as Newtonsoft.Json.Linq.JArray; Newtonsoft.Json.Linq.JArray rightItemsArray = json.mid_right as Newtonsoft.Json.Linq.JArray; //如果字數超過6個字要強制換行 //前面先截掉,後面也重新開始 var orderType = "A";//右中左 if (midTitle.StartX.CompareTo(rightTitle.StartX) > 0 && rightTitle.StartX.CompareTo(leftTitle.StartX) > 0) { orderType = "B";//中右左 if (midItemsArray != null && midItemsArray.Count > 0) { string s = string.Empty; int i = 0; foreach (var m in midItemsArray) { if (m["fam_name"]?.ToString().Length >= 6) { s = s + ";" + m["fam_name"] + ";"; } else { s = s + " " + m["fam_name"]; } i++; } nowContent.Add(s); } if (rightItemsArray != null&&rightItemsArray.Count>0) nowContent.Add(string.Join(" ", rightItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", "")))); if (leftItemsArray != null&&leftItemsArray.Count>0) nowContent.Add(string.Join(" ", leftItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", "")))+";"); } else if (leftTitle.StartX.CompareTo(midTitle.StartX) > 0 && midTitle.StartX.CompareTo(rightTitle.StartX) > 0) { orderType = "C";//左中右 if (leftItemsArray != null && leftItemsArray.Count > 0) nowContent.Add(string.Join(" ", leftItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", "")))); if (midItemsArray != null && midItemsArray.Count > 0) { string s = string.Empty; int i = 0; foreach (var m in midItemsArray) { if (m["fam_name"]?.ToString().Length >= 6) { s = s +";" + m["fam_name"] +";"; } else { s = s + " " + m["fam_name"]; } i++; } nowContent.Add(s); } if (rightItemsArray != null && rightItemsArray.Count > 0) nowContent.Add(string.Join(" ", rightItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", ""))) + ";"); } else if (rightTitle.StartX.CompareTo(midTitle.StartX) > 0 && leftTitle.StartX.CompareTo(midTitle.StartX) > 0) { orderType = "D";//右左中 if (rightItemsArray != null && rightItemsArray.Count > 0) nowContent.Add(string.Join(" ", rightItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", "")))); if (leftItemsArray != null && leftItemsArray.Count > 0) nowContent.Add(string.Join(" ", leftItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", "")))); if (midItemsArray != null && midItemsArray.Count > 0) { string s = string.Empty; int i = 0; foreach (var m in midItemsArray) { if (m["fam_name"]?.ToString().Length >= 6) { s = s + ";" + m["fam_name"] + ";"; } else { s = s + " " + m["fam_name"]; } i++; } nowContent.Add(s); } } else if (midTitle.StartX.CompareTo(leftTitle.StartX) > 0 && leftTitle.StartX.CompareTo(rightTitle.StartX) > 0) { orderType = "E";//中左右 if (midItemsArray != null && midItemsArray.Count > 0) { string s = string.Empty; int i = 0; foreach (var m in midItemsArray) { if (m["fam_name"]?.ToString().Length >= 6) { s = s + ";" + m["fam_name"] + ";"; } else { s = s + " " + m["fam_name"]; } i++; } nowContent.Add(s); } if (leftItemsArray != null && leftItemsArray.Count > 0) nowContent.Add(string.Join(" ", leftItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", "")))); if (rightItemsArray != null && rightItemsArray.Count > 0) nowContent.Add(string.Join(" ", rightItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", ""))) + ";"); } else if (leftTitle.StartX.CompareTo(rightTitle.StartX) > 0 && rightTitle.StartX.CompareTo(midTitle.StartX) > 0) { orderType = "F";//左右中 if (leftItemsArray != null && leftItemsArray.Count > 0) nowContent.Add(string.Join(" ", leftItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", "")))); if (rightItemsArray != null && rightItemsArray.Count > 0) nowContent.Add(string.Join(" ", rightItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", "")))); if (midItemsArray != null && midItemsArray.Count > 0) { string s = string.Empty; int i = 0; foreach (var m in midItemsArray) { if (m["fam_name"]?.ToString().Length >= 6) { s = s + ";" + m["fam_name"] + ";"; } else { s = s + " " + m["fam_name"]; } i++; } nowContent.Add(s); } } else {//右中左 if (rightItemsArray != null && rightItemsArray.Count > 0) nowContent.Add(string.Join(" ", rightItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", "")))); if (midItemsArray != null && midItemsArray.Count > 0) { string s = string.Empty; int i = 0; foreach (var m in midItemsArray) { if (m["fam_name"]?.ToString().Length >= 6) { s = s + ";" + m["fam_name"] + ";"; } else { s = s + " " + m["fam_name"]; } i++; } nowContent.Add(s); } if (leftItemsArray != null && leftItemsArray.Count > 0) nowContent.Add(string.Join(" ", leftItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", ""))) + ";"); } //if (nowContent.Count > 6) //{ // Paragraph para1 = new Paragraph(); // //Run run1 = para1.AppendChild(new Run()); // Run run1 = new Run(); // RunProperties runProps1 = new RunProperties( // //new Bold(), // //new Italic(), // new FontSize() { Val = "36" }, // 12 pt // //new Color() { Val = "FF0000" }, // Red Text // new RunFonts() // { // Ascii = "DFKai-SB", // 英數字型使用標楷體 // EastAsia = "DFKai-SB" // 中文字型使用標楷體 // } // ); // // 建立段落屬性 // ParagraphProperties pPr1 = new ParagraphProperties(); // pPr1.Append(new TextDirection() { Val = TextDirectionValues.TopToBottomRightToLeft }); // // 建立縮排物件 // // 設定左縮排為 0,首行縮排 480 dxa (約 2 中文字寬) // Indentation ind = new Indentation() { Left = "720", LeftChars = 300 }; // // 將縮排加入段落屬性 // pPr1.Append(ind); // para1.Append(pPr1); // run1.Append(runProps1); // string[] splits = string.Join("", nowContent).Split(';'); // int j = 0; // foreach (var txt in splits) // { // run1.Append(new Text($"{string.Join(" ", txt)}")); // if (j != splits.Length - 1) // { // run1.Append(new Break()); // } // j++; // } // para1.Append(run1); // body.AppendChild(para1); // nowContent.Clear(); //} //if(string.Join(" ",nowContent).Length > 6) //{ // if (result.Count > 0) // { // Paragraph para = body.AppendChild(new Paragraph()); // Run run = para.AppendChild(new Run()); // RunProperties runProps = new RunProperties( // //new Bold(), // //new Italic(), // new FontSize() { Val = "36" }, // 12 pt // //new Color() { Val = "FF0000" }, // Red Text // new RunFonts() // { // Ascii = "DFKai-SB", // 英數字型使用標楷體 // EastAsia = "DFKai-SB" // 中文字型使用標楷體 // } // ); // run.Append(runProps); // run.AppendChild(new Text($"{string.Join(" ", result)}")); // } // result = new List(); // Paragraph para1 = body.AppendChild(new Paragraph()); // Run run1 = para1.AppendChild(new Run()); // RunProperties runProps1 = new RunProperties( // //new Bold(), // //new Italic(), // new FontSize() { Val = "36" }, // 12 pt // //new Color() { Val = "FF0000" }, // Red Text // new RunFonts() // { // Ascii = "DFKai-SB", // 英數字型使用標楷體 // EastAsia = "DFKai-SB" // 中文字型使用標楷體 // } // ); // run1.Append(runProps1); // run1.AppendChild(new Text($"{string.Join(" ", nowContent)}")); //} //else //{ // result.AddRange(nowContent); //} } //if (result.Count > 5) //{ // Paragraph para = body.AppendChild(new Paragraph()); // Run run = para.AppendChild(new Run()); // RunProperties runProps = new RunProperties( // //new Bold(), // //new Italic(), // new FontSize() { Val = "36" }, // 12 pt // //new Color() { Val = "FF0000" }, // Red Text // new RunFonts() // { // Ascii = "DFKai-SB", // 英數字型使用標楷體 // EastAsia = "DFKai-SB" // 中文字型使用標楷體 // } // ); // run.Append(runProps); // run.AppendChild(new Text($"{string.Join(" ", result)}")); // result = new List(); //} if (nowContent.Count > 10000) { Paragraph para1 = new Paragraph(); //Run run1 = para1.AppendChild(new Run()); Run run1 = new Run(); RunProperties runProps1 = new RunProperties( //new Bold(), //new Italic(), new FontSize() { Val = "36" }, // 12 pt //new Color() { Val = "FF0000" }, // Red Text new RunFonts() { Ascii = "DFKai-SB", // 英數字型使用標楷體 EastAsia = "DFKai-SB" // 中文字型使用標楷體 } ); // 建立段落屬性 ParagraphProperties pPr1 = new ParagraphProperties(); pPr1.Append(new TextDirection() { Val = TextDirectionValues.TopToBottomRightToLeft }); // 建立縮排物件 // 設定左縮排為 0,首行縮排 480 dxa (約 2 中文字寬) Indentation ind = new Indentation() { Left = "720", LeftChars = 300 }; // 將縮排加入段落屬性 pPr1.Append(ind); para1.Append(pPr1); run1.Append(runProps1); string[] splits = string.Join("", nowContent).Split(';'); int j = 0; foreach (var txt in splits) { if (!string.IsNullOrWhiteSpace(txt)) { if (txt.Length>=6&&j!=0) { run1.Append(new Break()); } run1.Append(new Text($"{string.Join(" ", txt)}")); //if (j != splits.Length - 1) //{ // run1.Append(new Break()); //} } j++; } para1.Append(run1); body.AppendChild(para1); nowContent.Clear(); } } if (nowContent.Count > 0) { Paragraph para1 = new Paragraph(); //Run run1 = para1.AppendChild(new Run()); Run run1 = new Run(); RunProperties runProps1 = new RunProperties( //new Bold(), //new Italic(), new FontSize() { Val = "36" }, // 12 pt //new Color() { Val = "FF0000" }, // Red Text new RunFonts() { Ascii = "DFKai-SB", // 英數字型使用標楷體 EastAsia = "DFKai-SB" // 中文字型使用標楷體 } ); // 建立段落屬性 ParagraphProperties pPr1 = new ParagraphProperties(); pPr1.Append(new TextDirection() { Val = TextDirectionValues.TopToBottomRightToLeft }); // 建立縮排物件 // 設定左縮排為 0,首行縮排 480 dxa (約 2 中文字寬) Indentation ind = new Indentation() { Left = "720", LeftChars = 300 }; // 將縮排加入段落屬性 pPr1.Append(ind); para1.Append(pPr1); run1.Append(runProps1); string[] splits = string.Join("", nowContent).Split(';'); int j = 0; foreach (var txt in splits) { if (!string.IsNullOrWhiteSpace(txt)) { if (txt.Length >= 6&&j!=0) { run1.Append(new Break()); } run1.Append(new Text($"{string.Join(" ", txt)}")); //if (j != splits.Length - 1) //{ // run1.Append(new Break()); //} } j++; } para1.Append(run1); body.AppendChild(para1); nowContent.Clear(); } //if (result.Count > 0) //{ // Paragraph para = body.AppendChild(new Paragraph()); // Run run = para.AppendChild(new Run()); // RunProperties runProps = new RunProperties( // //new Bold(), // //new Italic(), // new FontSize() { Val = "36" }, // 12 pt // //new Color() { Val = "FF0000" }, // Red Text // new RunFonts() // { // Ascii = "DFKai-SB", // 英數字型使用標楷體 // EastAsia = "DFKai-SB" // 中文字型使用標楷體 // } // ); // run.Append(runProps); // run.AppendChild(new Text($"{string.Join(" ", result)}")); // result = new List(); //} Paragraph pageBreakParagraph = new Paragraph( new Run( new Break() { Type = BreakValues.Page } ) ); // 將這個段落附加到文件的 Body 中 body.Append(pageBreakParagraph); //先強制換頁 //在處理超薦牌位 result = new List(); foreach (var item in head_list) { //S要參數化 var detail_list = list.Where(x => x.parent_num == item.num && x.print_id.Contains("S")).ToList(); //分兩種,一種每一張呈現,一種同樣陽上的拚在一起 foreach(var d in detail_list) { var style = styles.Where(y => y.StyleID == d.style).ToList(); var addr= style.Where(z => z.ElementID == "address").FirstOrDefault(); var leftTitle = style.Where(z => z.ElementID == "lefttitle").FirstOrDefault(); var midTitle = style.Where(z => z.ElementID == "title1").FirstOrDefault(); var rightTitle = style.Where(z => z.ElementID == "righttitle").FirstOrDefault(); var alive = style.Where(z => z.ElementID == "alive").FirstOrDefault(); var json = JsonConvert.DeserializeObject(d.f_num_tablet); // 1. 先安全地把 mid_items 轉成 JArray Newtonsoft.Json.Linq.JArray midItemsArray = json.mid_items as Newtonsoft.Json.Linq.JArray; Newtonsoft.Json.Linq.JArray leftItemsArray = json.mid_left as Newtonsoft.Json.Linq.JArray; Newtonsoft.Json.Linq.JArray rightItemsArray = json.mid_right as Newtonsoft.Json.Linq.JArray; string addrItemsArray =json.addr_items==null?"":(string )json.addr_items; Newtonsoft.Json.Linq.JArray aliveItemsArray = json.left_items as Newtonsoft.Json.Linq.JArray; if (mode=="A") {//一張一張 //地址 正名 陽上 nowContent = new List(); var orderType = "A";//右中左 if (midTitle.StartX.CompareTo(rightTitle.StartX) > 0 && rightTitle.StartX.CompareTo(leftTitle.StartX) > 0) { orderType = "B";//中右左 if (midItemsArray != null && midItemsArray.Count > 0) { string s = string.Empty; int i = 0; foreach (var m in midItemsArray) { if (m["fam_name"]?.ToString().Length > 6) { s = s + m["fam_name"] + (i != midItemsArray.Count - 1 ? ";" : ""); } else { s = s + " " + m["fam_name"]; } i++; } nowContent.Add(s); } if (rightItemsArray != null && rightItemsArray.Count > 0) nowContent.Add(string.Join(" ", rightItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", "")))); if (leftItemsArray != null && leftItemsArray.Count > 0) nowContent.Add(string.Join(" ", leftItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", "")))); } else if (leftTitle.StartX.CompareTo(midTitle.StartX) > 0 && midTitle.StartX.CompareTo(rightTitle.StartX) > 0) { orderType = "C";//左中右 if (leftItemsArray != null && leftItemsArray.Count > 0) nowContent.Add(string.Join(" ", leftItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", "")))); if (midItemsArray != null && midItemsArray.Count > 0) { string s = string.Empty; int i = 0; foreach (var m in midItemsArray) { if (m["fam_name"]?.ToString().Length > 6) { s = s + m["fam_name"] + (i != midItemsArray.Count - 1 ? ";" : ""); } else { s = s + " " + m["fam_name"]; } i++; } nowContent.Add(s); } if (rightItemsArray != null && rightItemsArray.Count > 0) nowContent.Add(string.Join(" ", rightItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", "")))); } else if (rightTitle.StartX.CompareTo(midTitle.StartX) > 0 && leftTitle.StartX.CompareTo(midTitle.StartX) > 0) { orderType = "D";//右左中 if (rightItemsArray != null && rightItemsArray.Count > 0) nowContent.Add(string.Join(" ", rightItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", "")))); if (leftItemsArray != null && leftItemsArray.Count > 0) nowContent.Add(string.Join(" ", leftItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", "")))); if (midItemsArray != null && midItemsArray.Count > 0) { string s = string.Empty; int i = 0; foreach (var m in midItemsArray) { if (m["fam_name"]?.ToString().Length > 6) { s = s + m["fam_name"] + (i != midItemsArray.Count - 1 ? ";" : ""); } else { s = s + " " + m["fam_name"]; } i++; } nowContent.Add(s); } } else if (midTitle.StartX.CompareTo(leftTitle.StartX) > 0 && leftTitle.StartX.CompareTo(rightTitle.StartX) > 0) { orderType = "E";//中左右 if (midItemsArray != null && midItemsArray.Count > 0) { string s = string.Empty; int i = 0; foreach (var m in midItemsArray) { if (m["fam_name"]?.ToString().Length > 6) { s = s + m["fam_name"] + (i != midItemsArray.Count - 1 ? ";" : ""); } else { s = s + " " + m["fam_name"]; } i++; } nowContent.Add(s); } if (leftItemsArray != null && leftItemsArray.Count > 0) nowContent.Add(string.Join(" ", leftItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", "")))); if (rightItemsArray != null && rightItemsArray.Count > 0) nowContent.Add(string.Join(" ", rightItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", "")))); } else if (leftTitle.StartX.CompareTo(rightTitle.StartX) > 0 && rightTitle.StartX.CompareTo(midTitle.StartX) > 0) { orderType = "F";//左右中 if (leftItemsArray != null && leftItemsArray.Count > 0) nowContent.Add(string.Join(" ", leftItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", "")))); if (rightItemsArray != null && rightItemsArray.Count > 0) nowContent.Add(string.Join(" ", rightItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", "")))); if (midItemsArray != null && midItemsArray.Count > 0) { string s = string.Empty; int i = 0; foreach (var m in midItemsArray) { if (m["fam_name"]?.ToString().Length > 6) { s = s + m["fam_name"] + (i != midItemsArray.Count - 1 ? ";" : ""); } else { s = s + " " + m["fam_name"]; } i++; } nowContent.Add(s); } } else {//右中左 if (rightItemsArray != null && rightItemsArray.Count > 0) nowContent.Add(string.Join(" ", rightItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", "")))); if (midItemsArray != null && midItemsArray.Count > 0) { string s = string.Empty; int i = 0; foreach(var m in midItemsArray) { if (m["fam_name"]?.ToString().Length > 6) { s=s+m["fam_name"]+ (i != midItemsArray.Count-1 ? ";" : ""); }else { s = s + " " + m["fam_name"]; } i++; } nowContent.Add(s); } //nowContent.Add(string.Join(" ", midItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", "")))); if (leftItemsArray != null && leftItemsArray.Count > 0) nowContent.Add(string.Join(" ", leftItemsArray.Select(token => token["fam_name"]?.ToString().Replace("\r", "").Replace("\n", "")))); } Paragraph para3 = body.AppendChild(new Paragraph()); Run run3 = para3.AppendChild(new Run()); RunProperties runProps3 = new RunProperties( new Bold(), //new Italic(), new FontSize() { Val = "36" }, // 12 pt //new Color() { Val = "FF0000" }, // Red Text new RunFonts() { Ascii = "DFKai-SB", // 英數字型使用標楷體 EastAsia = "DFKai-SB" // 中文字型使用標楷體 } ); run3.Append(runProps3); run3.AppendChild(new Text($"佛力超薦")); if (!string.IsNullOrWhiteSpace(addrItemsArray)) { Paragraph para = body.AppendChild(new Paragraph()); Run run = para.AppendChild(new Run()); RunProperties runProps = new RunProperties( //new Bold(), //new Italic(), new FontSize() { Val = "36" }, // 12 pt //new Color() { Val = "FF0000" }, // Red Text new RunFonts() { Ascii = "DFKai-SB", // 英數字型使用標楷體 EastAsia = "DFKai-SB" // 中文字型使用標楷體 } ); run.Append(runProps); run.AppendChild(new Text($"地址 {string.Join(" ", addrItemsArray?.ToString())}")); } Paragraph para1 = new Paragraph(); //Run run1 = para1.AppendChild(new Run()); Run run1 = new Run(); RunProperties runProps1 = new RunProperties( //new Bold(), //new Italic(), new FontSize() { Val = "36" }, // 12 pt //new Color() { Val = "FF0000" }, // Red Text new RunFonts() { Ascii = "DFKai-SB", // 英數字型使用標楷體 EastAsia = "DFKai-SB" // 中文字型使用標楷體 } ); // 建立段落屬性 ParagraphProperties pPr1 = new ParagraphProperties(); pPr1.Append(new TextDirection() { Val = TextDirectionValues.TopToBottomRightToLeft }); // 建立縮排物件 // 設定左縮排為 0,首行縮排 480 dxa (約 2 中文字寬) Indentation ind = new Indentation() { Left = "720", LeftChars = 300 }; // 將縮排加入段落屬性 pPr1.Append(ind); para1.Append(pPr1); run1.Append(runProps1); string[] splits = string.Join("", nowContent).Split(';'); int j = 0; foreach (var txt in splits) { run1.Append(new Text($"{string.Join(" ", txt)}")); if (j != splits.Length - 1) { run1.Append(new Break()); } j++; } para1.Append(run1); body.AppendChild(para1); Paragraph para2 = body.AppendChild(new Paragraph()); ParagraphProperties pPr2 = new ParagraphProperties(); // 2. 建立段落邊框物件 ParagraphBorders pBdr = new ParagraphBorders(); // 在直書中,BottomBorder 會變成「段落左側的垂直分隔線」 BottomBorder bottomBorder = new BottomBorder() { Val = BorderValues.Dashed, // 單實線 Size = 12, // 線條粗細 (1/8 點,12 代表 1.5 點) Space = 4, // 線條與文字的間距 Color = "000000" // 黑色 }; pBdr.Append(bottomBorder); pPr2.Append(pBdr); para2.Append(pPr2); Run run2 = para2.AppendChild(new Run()); RunProperties runProps2 = new RunProperties( new Bold(), //new Italic(), new FontSize() { Val = "36" }, // 12 pt //new Color() { Val = "FF0000" }, // Red Text new RunFonts() { Ascii = "DFKai-SB", // 英數字型使用標楷體 EastAsia = "DFKai-SB" // 中文字型使用標楷體 } ); run2.Append(runProps2); run2.AppendChild(new Text($"陽上報恩人 ")); Run run4 = para2.AppendChild(new Run()); RunProperties runProps4 = new RunProperties( //new Bold(), //new Italic(), new FontSize() { Val = "36" }, // 12 pt //new Color() { Val = "FF0000" }, // Red Text new RunFonts() { Ascii = "DFKai-SB", // 英數字型使用標楷體 EastAsia = "DFKai-SB" // 中文字型使用標楷體 } ); run4.Append(runProps4); run4.AppendChild(new Text($" {string.Join(" ", aliveItemsArray.Select(token => token["fam_name"]?.ToString()))}")); run4.Append(new Break()); } else {//同樣陽上合併 } } } // 3. 設定【整頁直書】的重要步驟: // 檢查 Body 最後有沒有 SectionProperties,沒有就新增一個 DocumentFormat.OpenXml.Wordprocessing.SectionProperties sectionProps = body.Elements().LastOrDefault(); if (sectionProps == null) { sectionProps = new DocumentFormat.OpenXml.Wordprocessing.SectionProperties(); body.AppendChild(sectionProps); // 必須是 Body 的最後一個子元素 } // 2. 建立頁面大小物件 (PageSize) PageSize pageSize = new PageSize(); // 3. 設定為 A4 橫向 (把原本縱向的寬高數值對調,並指定 Orient) pageSize.Width = 16838; // A4 橫向寬度 (Twips) pageSize.Height = 11906; // A4 橫向高度 (Twips) pageSize.Orient = PageOrientationValues.Landscape; // 4. 將設定附加到章節屬性中 sectionProps.AppendChild(pageSize); // 4. 將直書屬性套用到章節中 (TopToBottomRightToLeft) sectionProps.AppendChild(new TextDirection() { Val = TextDirectionValues.TopToBottomRightToLeft }); } return Ok(new { list= head_list }); } }