C# 绘制Word形状——基本形状、组合形状
一、序言
在Office Word中,支持在Word文档中插入类型非常丰富的形状,包括线条、矩形、基本形状(诸如圆形、多边形、星形、括号、笑脸等等图形)、箭头形状、公式形状、流程图、旗帜图形、标注图形等等,我们在编程过程中,想要在Word中绘制不同类型的图形,可以通过类库来操作。控件Spire.Doc for .NET 6.0及以上版本开始支持Office Word中的所有图形,可以通过代码操作某个单一的形状,也可以通过将单一形状进行组合来获得想要的图形或形状效果,当然,也支持自己自定义图形,通过编程绘制也是可以的。下面将介绍向Word绘制形状和组合形状的方法,方法中的代码供参考。
PS:
- Spire.Doc for .NET获取地址
- 安装后,dll文件可在安装路径下的Bin文件夹中获取
Dll引用
二、代码示例
(一)绘制单一形状
步骤1:添加如下using指定
using Spire.Doc; using Spire.Doc.Documents; using Spire.Doc.Fields; using System.Drawing;
步骤2:创建示例,添加section、paragraph
//创建一个Document实例 Document doc = new Document(); //添加一个section paragraph Section sec = doc.AddSection(); Paragraph para1 = sec.AddParagraph();
步骤3:在文档指定位置插入形状,并设置形状类型、大小、填充颜色、线条样式等
(这里简单列举几个形状的添加方法,方法比较简单,不做赘述,效果图中列举了部分形状样式,需要其他样式的形状可自行设置添加)
//插入一个矩形 ShapeObject shape1 = para1.AppendShape(50, 50, ShapeType.Rectangle); shape1.FillColor = Color.Blue; shape1.StrokeColor = Color.LightSkyBlue; shape1.HorizontalPosition = 20; shape1.VerticalPosition = 20; //插入一个圆形 ShapeObject shape2 = para1.AppendShape(50, 50, ShapeType.Ellipse); shape2.FillColor = Color.Purple; shape2.StrokeColor = Color.LightPink; shape2.LineStyle = ShapeLineStyle.Single; shape2.StrokeWeight = 1; shape2.HorizontalPosition = 80; shape2.VerticalPosition = 20; //插入一个公式符号 + ShapeObject shape3 = para1.AppendShape(50, 50, ShapeType.Plus); shape3.FillColor = Color.DarkCyan; shape3.StrokeColor = Color.LightGreen; shape3.LineStyle = ShapeLineStyle.Single; shape3.StrokeWeight = 1; shape3.HorizontalPosition = 140; shape3.VerticalPosition = 20; //插入一颗星形 ShapeObject shape4 = para1.AppendShape(50, 50, ShapeType.Star); shape4.FillColor = Color.Red; shape4.StrokeColor = Color.Gold; shape4.LineStyle = ShapeLineStyle.Single; shape4.HorizontalPosition = 200; shape4.VerticalPosition = 20;
步骤4:保存文档
//保存并打开文档 doc.SaveToFile("InsertShapes.docx", FileFormat.Docx2010); System.Diagnostics.Process.Start("InsertShapes.docx");
形状添加效果:
全部代码:
1 using Spire.Doc; 2 using Spire.Doc.Documents; 3 using Spire.Doc.Fields; 4 using System.Drawing; 5 6 namespace AddShapes_Doc 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 //创建一个Document实例 13 Document doc = new Document(); 14 15 //添加一个section paragraph 16 Section sec = doc.AddSection(); 17 Paragraph para1 = sec.AddParagraph(); 18 19 //插入一个矩形 20 ShapeObject shape1 = para1.AppendShape(50, 50, ShapeType.Rectangle); 21 shape1.FillColor = Color.Blue; 22 shape1.StrokeColor = Color.LightSkyBlue; 23 shape1.HorizontalPosition = 20; 24 shape1.VerticalPosition = 20; 25 26 //插入一个圆形 27 ShapeObject shape2 = para1.AppendShape(50, 50, ShapeType.Ellipse); 28 shape2.FillColor = Color.Purple; 29 shape2.StrokeColor = Color.LightPink; 30 shape2.LineStyle = ShapeLineStyle.Single; 31 shape2.StrokeWeight = 1; 32 shape2.HorizontalPosition = 80; 33 shape2.VerticalPosition = 20; 34 35 //插入一个公式符号 + 36 ShapeObject shape3 = para1.AppendShape(50, 50, ShapeType.Plus); 37 shape3.FillColor = Color.DarkCyan; 38 shape3.StrokeColor = Color.LightGreen; 39 shape3.LineStyle = ShapeLineStyle.Single; 40 shape3.StrokeWeight = 1; 41 shape3.HorizontalPosition = 140; 42 shape3.VerticalPosition = 20; 43 44 //插入一颗星形 45 ShapeObject shape4 = para1.AppendShape(50, 50, ShapeType.Star); 46 shape4.FillColor = Color.Red; 47 shape4.StrokeColor = Color.Gold; 48 shape4.LineStyle = ShapeLineStyle.Single; 49 shape4.HorizontalPosition = 200; 50 shape4.VerticalPosition = 20; 51 52 //插入一个立方体 53 ShapeObject shape5 = para1.AppendShape(50, 50, ShapeType.Cube); 54 shape5.FillColor = Color.OrangeRed; 55 shape5.StrokeColor = Color.Orange; 56 shape5.LineStyle = ShapeLineStyle.Single; 57 shape5.HorizontalPosition = 260; 58 shape5.VerticalPosition = 20; 59 60 //插入一个圆柱体 61 ShapeObject shape6 = para1.AppendShape(50, 50, ShapeType.Can); 62 shape6.FillColor = Color.Goldenrod; 63 shape6.StrokeColor = Color.Gold; 64 shape6.LineStyle = ShapeLineStyle.Single; 65 shape6.HorizontalPosition = 320; 66 shape6.VerticalPosition = 20; 67 68 //插入一个箭头 69 ShapeObject shape7 = para1.AppendShape(50, 50, ShapeType.Arrow); 70 shape7.FillColor = Color.Yellow; 71 shape7.StrokeColor = Color.Yellow; 72 shape7.LineStyle = ShapeLineStyle.Single; 73 shape7.HorizontalPosition = 20; 74 shape7.VerticalPosition = 80; 75 76 //插入一个v形臂章图形 77 ShapeObject shape8 = para1.AppendShape(50, 50, ShapeType.Chevron); 78 shape8.FillColor = Color.YellowGreen; 79 shape8.StrokeColor = Color.Yellow; 80 shape8.LineStyle = ShapeLineStyle.Single; 81 shape8.HorizontalPosition = 80; 82 shape8.VerticalPosition = 80; 83 84 //插入一个循环箭头图形 85 ShapeObject shape9 = para1.AppendShape(50, 50, ShapeType.CircularArrow); 86 shape9.FillColor = Color.Green; 87 shape9.StrokeColor = Color.Yellow; 88 shape9.LineStyle = ShapeLineStyle.Single; 89 shape9.HorizontalPosition = 140; 90 shape9.VerticalPosition = 80; 91 92 //插入一个云图形 93 ShapeObject shape10 = para1.AppendShape(50, 50, ShapeType.CloudCallout); 94 shape10.FillColor = Color.LightSkyBlue; 95 shape10.StrokeColor = Color.White; 96 shape10.LineStyle = ShapeLineStyle.Single; 97 shape10.HorizontalPosition = 200; 98 shape10.VerticalPosition = 80; 99 100 //插入一个环形图 101 ShapeObject shape11 = para1.AppendShape(50, 50, ShapeType.Donut); 102 shape11.FillColor = Color.Pink; 103 shape11.StrokeColor = Color.White; 104 shape11.LineStyle = ShapeLineStyle.Single; 105 shape11.HorizontalPosition = 260; 106 shape11.VerticalPosition = 80; 107 108 //插入一个波浪形状图 109 ShapeObject shape12 = para1.AppendShape(50, 50, ShapeType.DoubleWave); 110 shape12.FillColor = Color.Plum; 111 shape12.StrokeColor = Color.White; 112 shape12.LineStyle = ShapeLineStyle.Single; 113 shape12.HorizontalPosition = 320; 114 shape12.VerticalPosition = 80; 115 116 //插入一个礼结状图形 117 ShapeObject shape13 = para1.AppendShape(50, 50, ShapeType.EllipseRibbon); 118 shape13.FillColor = Color.RosyBrown; 119 shape13.StrokeColor = Color.White; 120 shape13.LineStyle = ShapeLineStyle.Single; 121 shape13.HorizontalPosition = 20; 122 shape13.VerticalPosition = 140; 123 124 //插入一个心形图 125 ShapeObject shape14 = para1.AppendShape(50, 50, ShapeType.Heart); 126 shape14.FillColor = Color.Red; 127 shape14.StrokeColor = Color.White; 128 shape14.LineStyle = ShapeLineStyle.Single; 129 shape14.HorizontalPosition = 80; 130 shape14.VerticalPosition = 140; 131 132 //插入一个六边形图形 133 ShapeObject shape15 = para1.AppendShape(50, 50, ShapeType.Hexagon); 134 shape15.FillColor = Color.DarkCyan; 135 shape15.StrokeColor = Color.White; 136 shape15.LineStyle = ShapeLineStyle.Single; 137 shape15.HorizontalPosition = 140; 138 shape15.VerticalPosition = 140; 139 140 //插入一个不规则图形 141 ShapeObject shape16 = para1.AppendShape(50, 50, ShapeType.IrregularSeal1); 142 shape16.FillColor = Color.DeepPink; 143 shape16.StrokeColor = Color.White; 144 shape16.LineStyle = ShapeLineStyle.Single; 145 shape16.HorizontalPosition = 200; 146 shape16.VerticalPosition = 140; 147 148 //插入一个月亮形状 149 ShapeObject shape17 = para1.AppendShape(50, 50, ShapeType.Moon); 150 shape17.FillColor = Color.Violet; 151 shape17.StrokeColor = Color.White; 152 shape17.LineStyle = ShapeLineStyle.Single; 153 shape17.HorizontalPosition = 260; 154 shape17.VerticalPosition = 140; 155 156 //插入一个"禁止"形状 157 ShapeObject shape18 = para1.AppendShape(50, 50, ShapeType.NoSmoking); 158 shape18.FillColor = Color.Yellow; 159 shape18.StrokeColor = Color.Goldenrod; 160 shape18.LineStyle = ShapeLineStyle.Single; 161 shape18.HorizontalPosition = 320; 162 shape18.VerticalPosition = 140; 163 164 //保存并打开文档 165 doc.SaveToFile("InsertShapes.docx", FileFormat.Docx2010); 166 System.Diagnostics.Process.Start("InsertShapes.docx"); 167 } 168 } 169 }
View Code
(二)添加组合形状
步骤1:添加如下using指令
using Spire.Doc; using Spire.Doc.Documents; using Spire.Doc.Fields; using System.Drawing;
步骤2:创建文档,添加section、paragraph
Document doc = new Document(); Section sec = doc.AddSection(); Paragraph para1 = sec.AddParagraph();
步骤3:添加文字,并应用格式到文字
para1.AppendText("中日文化交流"); ParagraphStyle style1 = new ParagraphStyle(doc); style1.Name = "titleStyle"; style1.CharacterFormat.Bold = true; style1.CharacterFormat.FontName = "隶书"; style1.CharacterFormat.FontSize = 30f; doc.Styles.Add(style1); para1.ApplyStyle("titleStyle"); para1.Format.HorizontalAlignment = HorizontalAlignment.Center;
步骤4:实例化段落2,并创建一个形状组合,并设置大小
//实例化段落2 Paragraph para2 = sec.AddParagraph(); //创建一个形状组合并设置大小 ShapeGroup shapegr = para2.AppendShapeGroup(300, 300);
步骤5:绘制一个中国国旗,这里需要组合形状矩形和五角星形,并填充相应的颜色
//添加一个矩形到形状组合 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Rectangle) { Width = 900, Height = 500, LineStyle = ShapeLineStyle.Single, FillColor = Color.Red, StrokeColor = Color.Red, StrokeWeight = 1, }); //添加第一个五角星到形状组合 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Star) { Width = 100, Height = 100, VerticalPosition = 90, HorizontalPosition = 90, LineStyle = ShapeLineStyle.Single, FillColor = Color.Yellow, StrokeColor = Color.Yellow, StrokeWeight = 1, }); //添加第二个五角星到形状组合 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Star) { Width = 50, Height = 50, VerticalPosition = 40, HorizontalPosition = 210, LineStyle = ShapeLineStyle.Single, FillColor = Color.Yellow, StrokeColor = Color.Yellow, StrokeWeight = 1, }); //添加第三个五角星到形状组合 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Star) { Width = 50, Height = 50, VerticalPosition = 80, HorizontalPosition = 280, LineStyle = ShapeLineStyle.Single, FillColor = Color.Yellow, StrokeColor = Color.Yellow, StrokeWeight = 1, }); //添加第四个五角星到形状组合 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Star) { Width = 50, Height = 50, VerticalPosition = 160, HorizontalPosition = 280, LineStyle = ShapeLineStyle.Single, FillColor = Color.Yellow, StrokeColor = Color.Yellow, StrokeWeight = 1, }); //添加第五个五角星到形状组合 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Star) { Width = 50, Height = 50, VerticalPosition = 220, HorizontalPosition = 210, LineStyle = ShapeLineStyle.Single, FillColor = Color.Yellow, StrokeColor = Color.Yellow, StrokeWeight = 1, });
步骤6:绘制一个日本国旗,需要组合形状矩形和圆形,并填充颜色
//绘制一个矩形并添加到形状组合 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Rectangle) { Width = 900, Height = 500, VerticalPosition = 700, HorizontalPosition = 600, LineStyle = ShapeLineStyle.Single, FillColor = Color.WhiteSmoke, StrokeColor = Color.WhiteSmoke, StrokeWeight = 1, }); //绘制一个圆形并添加到形状组合 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Ellipse) { Width = 250, Height = 250, VerticalPosition = 800, HorizontalPosition = 900, LineStyle = ShapeLineStyle.Single, FillColor = Color.Red, StrokeColor = Color.Red, StrokeWeight = 1, });
步骤7:保存文档
//保存并打开文档 doc.SaveToFile("InsertShapegroups.docx", FileFormat.Docx2010); System.Diagnostics.Process.Start("InsertShapegroups.docx");
添加效果:
(此时的图形是组合后的效果,任意拖动图形不会出现各个形状分离、错位的情况。)
全部代码:
1 using Spire.Doc; 2 using Spire.Doc.Documents; 3 using Spire.Doc.Fields; 4 using System.Drawing; 5 6 namespace InsertShapesGroup_Doc 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 //创建一个Document实例并添加section及paragraph 13 Document doc = new Document(); 14 Section sec = doc.AddSection(); 15 Paragraph para1 = sec.AddParagraph(); 16 //添加文字,并应用格式到文字 17 para1.AppendText("中日文化交流"); 18 ParagraphStyle style1 = new ParagraphStyle(doc); 19 style1.Name = "titleStyle"; 20 style1.CharacterFormat.Bold = true; 21 style1.CharacterFormat.FontName = "隶书"; 22 style1.CharacterFormat.FontSize = 30f; 23 doc.Styles.Add(style1); 24 para1.ApplyStyle("titleStyle"); 25 para1.Format.HorizontalAlignment = HorizontalAlignment.Center; 26 27 //实例化段落2 28 Paragraph para2 = sec.AddParagraph(); 29 //创建一个形状组合并设置大小 30 ShapeGroup shapegr = para2.AppendShapeGroup(300, 300); 31 32 //添加一个矩形到形状组合 33 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Rectangle) 34 { 35 Width = 900, 36 Height = 500, 37 LineStyle = ShapeLineStyle.Single, 38 FillColor = Color.Red, 39 StrokeColor = Color.Red, 40 StrokeWeight = 1, 41 }); 42 43 //添加第一个五角星到形状组合 44 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Star) 45 { 46 Width = 100, 47 Height = 100, 48 VerticalPosition = 90, 49 HorizontalPosition = 90, 50 LineStyle = ShapeLineStyle.Single, 51 FillColor = Color.Yellow, 52 StrokeColor = Color.Yellow, 53 StrokeWeight = 1, 54 }); 55 //添加第二个五角星到形状组合 56 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Star) 57 { 58 Width = 50, 59 Height = 50, 60 VerticalPosition = 40, 61 HorizontalPosition = 210, 62 LineStyle = ShapeLineStyle.Single, 63 FillColor = Color.Yellow, 64 StrokeColor = Color.Yellow, 65 StrokeWeight = 1, 66 }); 67 //添加第三个五角星到形状组合 68 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Star) 69 { 70 Width = 50, 71 Height = 50, 72 VerticalPosition = 80, 73 HorizontalPosition = 280, 74 LineStyle = ShapeLineStyle.Single, 75 FillColor = Color.Yellow, 76 StrokeColor = Color.Yellow, 77 StrokeWeight = 1, 78 }); 79 //添加第四个五角星到形状组合 80 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Star) 81 { 82 Width = 50, 83 Height = 50, 84 VerticalPosition = 160, 85 HorizontalPosition = 280, 86 LineStyle = ShapeLineStyle.Single, 87 FillColor = Color.Yellow, 88 StrokeColor = Color.Yellow, 89 StrokeWeight = 1, 90 }); 91 //添加第五个五角星到形状组合 92 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Star) 93 { 94 Width = 50, 95 Height = 50, 96 VerticalPosition = 220, 97 HorizontalPosition = 210, 98 LineStyle = ShapeLineStyle.Single, 99 FillColor = Color.Yellow, 100 StrokeColor = Color.Yellow, 101 StrokeWeight = 1, 102 }); 103 104 //绘制一个矩形并添加到形状组合 105 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Rectangle) 106 { 107 Width = 900, 108 Height = 500, 109 VerticalPosition = 700, 110 HorizontalPosition = 600, 111 LineStyle = ShapeLineStyle.Single, 112 FillColor = Color.WhiteSmoke, 113 StrokeColor = Color.Wheat, 114 StrokeWeight = 1, 115 }); 116 //绘制一个圆形并添加到形状组合 117 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Ellipse) 118 { 119 Width = 250, 120 Height = 250, 121 VerticalPosition = 800, 122 HorizontalPosition = 900, 123 LineStyle = ShapeLineStyle.Single, 124 FillColor = Color.Red, 125 StrokeColor = Color.Red, 126 StrokeWeight = 1, 127 }); 128 129 //保存并打开文档 130 doc.SaveToFile("InsertShapegroups.docx", FileFormat.Docx2010); 131 System.Diagnostics.Process.Start("InsertShapegroups.docx"); 132 } 133 } 134 }
View Code
以上全部是关于Word中绘制图形形状的内容。如需转载,请注明出处!
感谢阅读!