word试卷怎么加封装线(word试卷上的密封线是怎么弄的)

word试卷怎么加封装线(word试卷上的密封线是怎么弄的)

首页技巧更新时间:2024-08-10 07:32:17

此动态生成可勾选复选框是本人经过查阅DocumentFormat.OpenXml接口文档实践整理出来的方法,并结合网络上常用生成方法进行对比,以便开发者更好的根据场景进行选择使用。如有疑问,可下方留言交流学习。

创建控制台应用程序并引用Nuget包DocumentFormat.OpenXml

在项目根目录下创建测试word文档 test.docx

创建WordHelper助手类,并封装可勾选复选框和无法勾选复选框两种方法:1、生成可在word勾选的复选框

public static Paragraph GenerateCheckboxParagraphNew(List<CheckItem> items) { List<Run> runs=new List<Run>(); foreach (var item in items) { var checkedSym = item.IsChecked ? "0052" : "00A3"; var run1 = new Run(new SymbolChar() { Char = checkedSym, Font = "Wingdings 2", }); var run2 = new Run(new Text(item.Text.Insert(0, " ")) { Space = SpaceProcessingModeValues.Preserve }); runs.Add(run1); runs.Add(run2); } var element = new Paragraph(runs); return element; }2、无法在word勾选的复选框

public static Paragraph GenerateCheckboxParagraph(string internalName, int internalId, string textAfterTextbox,bool checkedVal=false) { var run1 = new Run( new FieldChar( new FormFieldData( new FormFieldName() { Val = internalName }, new Enabled(), new CalculateOnExit() { Val = OnOffValue.FromBoolean(checkedVal) }, new CheckBox( new AutomaticallySizeFormField(), new DefaultCheckBoxFormFieldState() { Val = OnOffValue.FromBoolean(checkedVal) })) ) { FieldCharType = FieldCharValues.Begin } ); var run2 = new Run(new FieldCode("FORMCHECKBOX") { Space = SpaceProcessingModeValues.Preserve }); var run3 = new Run(new FieldChar() { FieldCharType = FieldCharValues.End }); var run4 = new Run(new Text(textAfterTextbox)); var element = new Paragraph( run1, new BookmarkStart() { Name = internalName, Id = new StringValue(internalId.ToString()) }, run2, run3, new BookmarkEnd() { Id = new StringValue(internalId.ToString()) }, run4 ); return element; } }完整代码如下:

WordHelper代码

using DocumentFormat.OpenXml.Wordprocessing; using DocumentFormat.OpenXml; namespace OpenxmlDemo { public class WordHelper { /// <summary> /// 复选框项实体 /// </summary> public class CheckItem { public string Text { get; set; } public bool IsChecked { get; set; } } /// <summary> /// 可在word中勾选复选框 /// </summary> /// <param name="items"></param> /// <returns></returns> public static Paragraph GenerateCheckboxParagraphNew(List<CheckItem> items) { List<Run> runs=new List<Run>(); foreach (var item in items) { var checkedSym = item.IsChecked ? "0052" : "00A3"; var run1 = new Run(new SymbolChar() { Char = checkedSym, Font = "Wingdings 2", }); var run2 = new Run(new Text(item.Text.Insert(0, " ")) { Space = SpaceProcessingModeValues.Preserve }); runs.Add(run1); runs.Add(run2); } var element = new Paragraph(runs); return element; } /// <summary> /// 无法在word中勾选复选框 /// </summary> /// <param name="internalName"></param> /// <param name="internalId"></param> /// <param name="textAfterTextbox"></param> /// <param name="checkedVal"></param> /// <returns></returns> public static Paragraph GenerateCheckboxParagraph(string internalName, int internalId, string textAfterTextbox,bool checkedVal=false) { var run1 = new Run( new FieldChar( new FormFieldData( new FormFieldName() { Val = internalName }, new Enabled(), new CalculateOnExit() { Val = OnOffValue.FromBoolean(checkedVal) }, new CheckBox( new AutomaticallySizeFormField(), new DefaultCheckBoxFormFieldState() { Val = OnOffValue.FromBoolean(checkedVal) })) ) { FieldCharType = FieldCharValues.Begin } ); var run2 = new Run(new FieldCode("FORMCHECKBOX") { Space = SpaceProcessingModeValues.Preserve }); var run3 = new Run(new FieldChar() { FieldCharType = FieldCharValues.End }); var run4 = new Run(new Text(textAfterTextbox)); var element = new Paragraph( run1, new BookmarkStart() { Name = internalName, Id = new StringValue(internalId.ToString()) }, run2, run3, new BookmarkEnd() { Id = new StringValue(internalId.ToString()) }, run4 ); return element; } } }

Program代码

using DocumentFormat.OpenXml.Packaging; using OpenxmlDemo; using static OpenxmlDemo.WordHelper; //test.docx文件路径 var path=Path.Combine(AppContext.BaseDirectory,"test.docx"); using (WordprocessingDocument document= WordprocessingDocument.Open(path,true)) { var body = document.MainDocumentPart!.Document.Body; var checkBoxs = new List<CheckItem>() { new CheckItem() { Text="复选框1", IsChecked=false }, new CheckItem() { Text="复选框2", IsChecked=true }, new CheckItem() { Text="复选框3", IsChecked=true }, }; var paragraph = WordHelper.GenerateCheckboxParagraphNew(checkBoxs); body.AppendChild(paragraph); var noCheckParagraph = WordHelper.GenerateCheckboxParagraph("标签", 66, "无法勾选复选框", true); body.AppendChild(noCheckParagraph); document.Save(); document.Dispose(); }

运行Program程序后效果如下:

,
大家还看了
也许喜欢
更多栏目

© 1998-2024 shitiku.com.cn,All Rights Reserved.