基于Open XML的毕业论文格式修订系统的设计与实现

2022-05-10 05:25纳利军
电脑知识与技术 2022年9期
关键词:毕业论文

纳利军

摘要:大学本科生的毕业论文格式规范化问题一直困扰着广大师生,“毕业论文格式修订系统”就是为了解决这个痛点而开发的一套软件。它是在Office Open XML文档规范的基础上,引用Open XML SDK类集并结合C#的面向对象技术开发而成的。它提供了一个规范化的Word毕业论文模板,并对套用模板撰写的论文进行全文档自动格式修订,修订后的论文达到了宁夏大学教务处对于本科生毕业论文格式撰写规范的要求,历经实测效果良好。

关键词:Open XML;毕业论文;论文格式规范化;自动格式修订;Word编程

中图分类号:TP311.52      文献标识码:A

文章编号:1009-3044(2022)09-0041-03

1 引言

毕业论文的质量是衡量学生毕业成果的最重要的依据。论文的质量一般从两个方面来考量,一方面是论文的内容,另一方面是论文的格式。能够写出一篇整齐规范、格式符合要求的论文,是一个大学毕业生的必备素质。

为此,学校、学院两级相关单位每年都会颁布最新的本科毕业生论文格式撰写规范,三令五申要求毕业生必须严格遵照执行,然而学生们实际的执行情况仍不容乐观。其中的原因当然有部分学生的不认真和不重视,但更重要的原因就是过细过多的格式要求条款常常让学生和指导教师顾此失彼。

“宁夏大学本科生毕业论文格式修订系统”(以下简称“系统”)就是为了解决这一痛点而开发。学生在套用规定的Word模板编写完论文后,只须将论文导入系统,即可完成全文档格式的自动修订工作。系统在规划设计阶段借鉴了赖晓晨[1]老师在开发“学位论文格式规范自动检查系统”中所使用到的Open XML软件开发工具。

2 系统特点

2.1 基于Open XML

Office Open XML是一种基于XML的Office文档格式规范,是微软提出的一个开放的国际性标准[2],并在Microsoft Office 2007之后的版本开始应用。符合该规范的文档,其典型特征是在传统的office文件扩展名后面添加了字母“x”,例如Word文件的后缀名为“.docx”。查看一个Word文件的内部Open XML文档的简便方法是在文件扩展名后再添加一个“.zip”后缀[3](例如将a.docx更改为a.docx.zip),將文件转换为一个ZIP压缩格式的文件夹,即可打开文件夹观察到其内部的多个XML文档。

Open XML SDK是一个类集合,通过这些类可以创建和处理遵循Office Open XML文档格式规范的Open XML文档[4]。在系统的开发过程中所引用的DocumentFormat.OpenXml.Wordprocessing组件[5]就是SDK类集中专用于处理Word文档的应用程序接口。该组件可在Visual Studio开发环境中通过NuGet包管理器导入。

开发本系统所使用的编程语言是C#。C#是一种新式编程语言,不仅面向对象,还类型安全。开发人员利用C#能够生成在.NET中运行的多种安全可靠的应用程序[6]。

2.2 套用标准论文模板

系统提供了一个遵照学校的“本科生毕业论文格式撰写规范”编制的模板,其突出特点是运用了Word提供的“限制编辑”功能。一方面,模板将一些固定不变的文档内容(例如页边距、节、论文封面上的学号姓名等条目名称、中英文摘要标题等)作为不可编辑区域,不允许学生做任何文字或格式上的改动;另一方面,留出几个可编辑区域,分别对应着中英文摘要、正文、参考文献等内容部分,允许学生在这些区域内自由编辑。图1是论文模板的封面,其中用“[]”扩起来的区域是可编辑区域。

使用限制编辑功能,不仅可以将毕业论文中的标准化组成部分保护起来,还为系统定位论文的不同编辑区域提供了可靠的依据。

2.3 充分应用样式

“本科生毕业论文格式撰写规范”里针对论文的不同部分(中英文摘要、正文、参考文献等)有不同的段落、文字方面的格式要求,基于此,系统新建了许多的段落和字符样式,在重新修订论文的过程中针对论文的不同部分应用不同的样式。

使用样式的优点之一是多种格式统一管理,例如将段落的缩进、行间距等多个格式放置在一个样式内;优点之二就是只改一处却能覆盖全局,例如需要将正文的字体由四号字改为小四号字体,则只需要修改在正文上所应用的样式即可。

2.4 修订而不是检测

与目前国内大多数高校所开发的论文格式检测系统不同,系统采用的是修订的形式,简单来说就是将文档中(例如一个段落)旧有的格式删除,而直接应用指定的样式。这样做的好处是处理速度快,实现方式简单。Word文档的一个段落就有包括缩进、行间距等十几种格式,针对段落的每一个格式来判断对错不仅烦琐而且耗时。需要特别指出的是,修订只替换文档格式,而不更改其内容,不会造成原始资料的损失。

采用修订形式的另外一个好处就是切实减轻了师生负担。学生在撰写论文时可以完全不考虑格式方面的问题,写完并经过系统的重新修订后,只需要再做去除多余的空格空行、修改书写不规范的各级标题等简单工作。

2.5 采用多线程机制

本科生毕业论文的页数通常都在40页左右,对此进行逐段落的修订比较耗时。本系统将这种耗时操作交由后台线程处理,并在前台通过进度条显示修订进度,从而保证了系统不进入“假死”状态。

3 毕业论文的核心架构

图2显示了毕业论文模板所使用到的Wordprocessing组件中的一些常用类及其所对应的XML标签,完整的“Word文档结构”[7]请参阅微软官方文档。

其中,WordprocessingDocument是顶层类,使用该类的Open方法可以打开一个Word文件。Body、Header和Styles都是WordprocessingDocument的后代子节点类,其中Body对应着document.xml文档中的<w:body>标签,该类代表一个Word文件的主体,Word文档中所有的文字、表格和图片摘要等信息都内嵌在主体里;Header对应着header1.xml文档中的<w:hdr>标签,该类代表毕业论文的页眉;Styles对应着styles.xml文档中的<w:styles>标签,该类代表样式表,系统所定义的所有的段落、字符或表格等样式都储存于样式表中。

Paragraph、Table和SdtBlock是Body的直接子节点类。其中Paragraph代表段落,是本系统修订的基本单元;Table代表表格,Word中的每个表格都独立于段落而单独存在;SdtBlock代表块级结构化文档标记,毕业论文中的目录就内嵌在该块级元素中。

ParagraphProperties、Run、Hyperlink和PermStart是Paragraph的直接子节点类。其中ParagraphProperties是段落属性,所有有关段落的格式(例如行间距等)都是段落属性的子节点类;Run代表一个连续的文本区域(一个或几个连续的字符),简称“串”,一个段落就是由一系列前后相继的串构成的;Hyperlink是超链接,其子节点类通常都是串,在毕业论文里会经常出现这种从网页上直接拷贝过来的、带有超链接标记的文字;PermStart是允许编辑区域开始类,可借此类判断一个允许编辑区域的开始。

RunProperties、Text和Drawing是Run的直接子节点类。其中RunProperties是串属性,所有有关串的格式(例如字体的大小)都是串属性的子节点类;Text是串文本,是系统不可以修改的原始资料;Drawing代表图片,常见类型(jpg、png、bmp或tiff)的图片摘要信息都内嵌在该类中。

TableProperties是Table的直接子节点类。TableProperties是表格属性,所有有关表格的格式(例如边框的宽度)都是表格属性的子节点类。

Header类的直接子节点类是Paragraph,如果想修改毕业论文的页眉,可以通过修改Header类的子节点类Paragraph的子节点类Run来实现。

Style是Styles的直接子节点类。Style代表一个单独的样式,可以是段落类型的样式,也可以是字符串类型的样式。所有的样式都是样式表的子节点类。

系统在修订毕业论文的过程中,就是通过这样一个架构体系由顶到底逐步深入到段属性、串属性、表属性上,然后用指定的样式替换其子节点类。

4 软件系统结构

系统总体分为三个模块,分别是合法性检查及初始化模块、样式核查模块和文档格式化模块,三个模块按序执行,如图3。

“合法性检查及初始化模块”首先检查学生是否使用了规定的模板,检查通过后开始创建各层级类的实例。

“样式核查模块”对系统所引用到的每一个样式进行完整性验证。毕业论文模板在定制的过程中对Word的很多已有样式进行了重新编辑,比如“标题1”~“标题3”样式、“目录”样式、“三线表”样式等,这些样式一经设定是不允许学生再修改的。由于每一个样式都有一个Rsid(重新修订ID),只要样式发生了变动其值就会被Word重新改写,所以系统通过对样式Rsid的核查来获知是否一个样式被人为改动过。

“文档格式化模块”是系统的核心,其基本思想是顺序读取Body的每一个直接子类,只对其中的段落Paragraph、表格Table和结构体SdtBlock三个类做相应的处理。处理时要根据当前的处理阶段将三个类分别交给相应的阶段处理程序去操作。毕业论文的处理按序分为封面、中英文摘要、正文、参考文献、谢辞和附录共6个阶段,初始化阶段是“封面”。

正文处理阶段既包含段落也包含表格(图片因为内嵌在串Run中,属于更底层的操作,此处不再赘述),以下仅对正文中的段落处理过程做一个说明,如图4。

在正文处理阶段,当系统读取到一个段落后,首先需要利用正则表达式判断它是否特殊段落,比如一、二、三级标题或者是表题、图题。如果是的话则对其应用指定的样式;如果不是特殊段落,则需要判断它是否阶段分界点。每个处理阶段都有标志性的标题作为分界点,这些标题都以单独的段落形式存在(例如正文部分是以“1 绪论”这个标题开始),且属于不可编辑内容,所以可以对其进行字符串完全匹配,以明确当前是否进入了新的处理阶段。当一个段落既不是特殊段落,又不是阶段分界点,则它只可能是正文的普通段落,对其应用正文段落样式即可。

按照“本科生毕业论文格式撰写规范”的要求,正文部分的一级、二级和三级标题有严格的内容和格式方面的要求。例如,二级标题的内容要求为:必须是“x.y 标题”的形式,其中“x”“y”代表序数,序数之间必须使用半角句号,序数后空一格接写标题,完整的二级标题形如“4.1 功能设计”。学生在撰写正文标题的过程中只需要遵循内容要求,而格式要求由系统来实现。为此,系统需要使用正则表达式的方式判断一个段落是否是二级标题,其正则表达式的写法(C#规范)为“@"^\d+\.\d+\s\w.*"”,相应的解释为:从段落的开始处“^”首先匹配一个或多个数字字符“\d+”,数字字符之后紧接着一个英文句号“\.”,英文句号之后紧接着是一个或多个数字字符“\d+”,其后必须是一个空格“\s”,空格之后必须至少有一个英文、数字或中文字符“\w”,其后可以是零个或多个任意字符“.*”。

5 结束语

系统已在宁夏大学信息学院网络工程系2021届毕业生的论文撰写过程中进行了初步试用,获得了积极的认可并积累了许多宝贵的意见。经版本升级后,下一步准备在全学院2022届毕业生中全面推广,并为今后推广到全校做好前期准备。

参考文献:

[1] 赖晓晨,姜瑞勋,于红,等.学位论文格式自动检查方法研究与实现[J].教育现代化,2019,6(57):289-292.

[2] Microsoft.About the Open XML SDK 2.5 for Office[EB/OL].(2021-09-17)[2021-11-24].https://docs.microsoft.com/en-us/office/open-xml/about-the-open-xml-sdk.

[3] Microsoft.How to: Manipulate Office Open XML Formats Documents[EB/OL].(2014-07-09) [2021-11-24].https://docs.microsoft.com/zh-cn/previous-versions/office/developer/office-2007/aa982683(v=office.12).

[4] Microsoft.What's new in the Open XML SDK 2.5 for Office[EB/OL].(2021-09-17) [2021-11-24].https://docs.microsoft.com/en-us/office/open-xml/what-s-new-in-the-open-xml-sdk.

[5] Microsoft.Working with WordprocessingML documents (Open XML SDK) [EB/OL].(2021-09-17) [2021-11-24].https://docs.microsoft.com/en-us/office/open-xml/working-with-wordprocessingml-documents.

[6] Microsoft.C#語言介绍[EB/OL].(2021-09-17) [2021-11-24].https://docs.microsoft.com/zh-cn/dotnet/csharp/tour-of-csharp/.

[7] Microsoft.Structure of a WordprocessingML document (Open XML SDK) [EB/OL].(2021-09-17) [2021-11-24].https://docs.microsoft.com/en-us/office/open-xml/structure-of-a-wordprocessingml-document.

【通联编辑:谢媛媛】

猜你喜欢
毕业论文
Word模板在毕业论文教学指导中的实践与应用
本科毕业论文:取消还是改革