最近在做一个项目,要求将内容自动写入到word中,涉及条码,表格等方式。下面我们来讲结一下
1.创建条码
网上下载BarcodeLib.dll,aspose,随后会附上百度云盘下载路径,或者联系我QQ546170667
2.项目中引用
3.开始处理,可以将文件保存成图片,也可以保存成流的方式。一开我保存为图片,后来优化了一下,采用流的方式,各有利弊。
1 /// <summary> 2 ///生成图片,返回流 3 /// </summary> 4 /// <param name="height"></param> 5 /// <param name="width"></param> 6 /// <param name="type"></param> 7 /// <param name="code">二维码</param> 8 /// <param name="image"></param> 9 /// <returns></returns> 10 public static byte[] GetBarcode_byte(int height, int width, BarcodeLib.TYPE type, 11 string code) 12 { 13 System.Drawing.Image image = null; 14 BarcodeLib.Barcode b = new BarcodeLib.Barcode( ); 15 b.BackColor = System.Drawing.Color.White; 16 b.ForeColor = System.Drawing.Color.Black; 17 b.IncludeLabel = true; 18 b.Alignment = BarcodeLib.AlignmentPositions.CENTER; 19 b.LabelPosition = BarcodeLib.LabelPositions.BOTTOMCENTER; 20 b.ImageFormat = System.Drawing.Imaging.ImageFormat.Png; 21 System.Drawing.Font font = new System.Drawing.Font("verdana", 10f); 22 b.LabelFont = font; 23 24 b.Height = height; 25 b.Width = width; 26 27 image = b.Encode(type, code);//生成图片 28 //image.Save(file_path, System.Drawing.Imaging.ImageFormat.Png);//如果要存为图片,取消注释 29 byte[] buffer = b.GetImageData(SaveTypes.PNG); 30 return buffer; 31 }
4.开始用aspose对word进行编辑
4.1思路:先创建文档模板,采用标签的方式进行占位,程序再读取标签,替换,生成文件
4.2先创建word,制作好格式,在要写入内容的地方,插入标签,具体百度查一下,大把的。
4.3开始书写代操作代码
引入以下
using Aspose.Words;
using Aspose.Words.Tables;
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 /// <summary> 2 /// 编辑文档 3 /// </summary> 4 5 public static void Edit_The_Document(string file_path, string title, string debtors, string linkman, string tel, string barcode, string datetime, string code, string name, string type, string remark, string handled, string assessing) 6 { 7 string tempFile = Path.GetFullPath(file_path).ToString( );//获取模板路径,这个根据个人模板路径而定。 8 Aspose.Words.Document doc = new Aspose.Words.Document(tempFile); 9 DocumentBuilder builder = new DocumentBuilder(doc);//操作word 10 Dictionary<string, string> dic = new Dictionary<string, string>( ); //创建键值对 第一个string 为书签名称 第二个string为要填充的数据 11 if (!string.IsNullOrWhiteSpace(title)) 12 { 13 dic.Add("title", title); 14 } 15 if (!string.IsNullOrEmpty(debtors)) 16 { 17 dic.Add("debtors", debtors); 18 } 19 if (!string.IsNullOrEmpty(linkman)) 20 { 21 dic.Add("linkman", linkman); 22 } 23 if (!string.IsNullOrEmpty(tel)) 24 { 25 dic.Add("tel", tel); 26 } 27 if (!string.IsNullOrWhiteSpace(barcode)) 28 { 29 dic.Add("barcode", barcode); 30 } 31 if (!string.IsNullOrEmpty(datetime)) 32 { 33 dic.Add("datetime", datetime); 34 } 35 if (!string.IsNullOrWhiteSpace(code)) 36 { 37 dic.Add("code", code); 38 } 39 if (!string.IsNullOrEmpty(name)) 40 { 41 dic.Add("name", linkman); 42 } 43 44 if (!string.IsNullOrEmpty(type)) 45 { 46 dic.Add("type", type); 47 } 48 if (!string.IsNullOrEmpty(remark)) 49 { 50 dic.Add("remark", remark); 51 } 52 if (!string.IsNullOrEmpty(handled)) 53 { 54 dic.Add("handled", handled); 55 } 56 if (!string.IsNullOrEmpty(assessing)) 57 { 58 dic.Add("assessing", assessing); 59 } 60 /* 61 DataTable nameList = new DataTable( ); 62 nameList.Columns.Add("借方"); 63 nameList.Columns.Add("条码"); 64 nameList.Columns.Add("样品名称"); 65 nameList.Columns.Add("规格型号"); 66 nameList.Columns.Add("单位"); 67 nameList.Columns.Add("数量"); 68 nameList.Columns.Add("备注"); 69 builder.Font.Name = "Code39AzaleaRegular2"; 70 71 DataRow row = null; 72 for (int i = 0; i < 3; i++) 73 { 74 row = nameList.NewRow( ); 75 row["编号"] = i.ToString( ).PadLeft(4, '0'); 76 77 row["条码"] = "6935965525074"; 78 row["样品名称"] = "Aa" + i.ToString( ); 79 row["规格型号"] = "Aa"; 80 row["单位"] = "台"; 81 row["数量"] = i.ToString( ); 82 row["备注"] = ""; 83 84 nameList.Rows.Add(row); 85 } 86 87 List<double> widthList = new List<double>( ); 88 for (int i = 0; i < nameList.Columns.Count; i++) 89 { 90 builder.MoveToCell(0, 0, i, 0); //移动单元格 91 double width = builder.CellFormat.Width;//获取单元格宽度 92 widthList.Add(width); 93 } 94 95 builder.MoveToBookmark("table"); //找到标签开始添加值 96 97 for (var i = 0; i < nameList.Rows.Count; i++) 98 { 99 for (var j = 0; j < nameList.Columns.Count; j++) 100 { 101 builder.InsertCell( );// 添加一个单元格 102 builder.CellFormat.Borders.LineStyle = Aspose.Words.LineStyle.Single; 103 builder.CellFormat.Borders.Color = System.Drawing.Color.Black; 104 builder.CellFormat.Width = widthList[j]; 105 builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None; 106 builder.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;//垂直居中对齐 107 builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐 108 } 109 builder.EndRow( ); 110 }*/ 111 112 foreach (var key in dic.Keys)//循环键值对 113 { 114 switch (key) 115 { 116 case "barcode": 117 118 builder.MoveToBookmark(key); //将光标移入书签的位置 119 string image = string.Empty; 120 121 builder.InsertImage(Utility.clsBarCode.GetBarcode_byte(60, 260, BarcodeLib.TYPE.CODE128, dic[key])); 122 123 break; 124 125 default: 126 builder.MoveToBookmark(key); //将光标移入书签的位置 127 builder.Write(dic[key]);//填充值 128 break; 129 } 130 } 131 132 doc.Save(file_path);//保存word 133 }
*其中注释的代码是表格,我这里没有用到表格,所以注释掉。表格很简单,只用创建表头,然后回车,表头下方插入标记即可
*以上代码具于网上整合,非本人原创,只做了部分修改。