C#编程使用开源类库解析和生成rtf格式内容的问题讲解
小标 2018-08-13 来源 : 阅读 2209 评论 0

摘要:本文主要向大家介绍了C#编程使用开源类库解析和生成rtf格式内容的问题讲解,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

本文主要向大家介绍了C#编程使用开源类库解析和生成rtf格式内容的问题讲解,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

问题描述
自己项目组开发的应用程序A,其中的内容编辑功能模块支持多种特殊符号的显示与编辑,例如上下标、粗糙度、尺寸公差、形位公差等,这些内容都是采用C#的GDI+功能来绘制的,内容保存到数据库时特殊符号采用编码的方式保存。近期在开发过程中遇到以下两类问题:
1)内容编辑功能模块中需要支持从Word或者CAD等软件中复制过来的OLE图形对象的显示,但是目前该功能模块无法获取这些图形的实际尺寸,也就无法正常显示OLE对象,经常造成在内容编辑功能模块中显示OLE图形对象变形;
2)应用程序A与另外一个项目组开发的应用程序B之间要进行集成,需要将应用程序A中内容编辑功能模块填写的包含特殊符号的内容传递给应用程序B使用,由于应用程序A中的特殊符号是特殊编码的,而应用程序B中使用的开源office控件进行内容显示,并不能识别出应用程序A中传递过来的特殊符号编码,因此需要对应用程序A中内容编辑功能模块填写的包含特殊符号的内容进行处理,便于应用程序B中保存和显示。
通过咨询同事以及百度相关资料,最终发现Word和CAD等软件中的内容,大部分可以直接复制到C#中的RichTextBox控件中,而RichTextBox可以将这些内容以RTF格式字符串输出。因此有如下考虑:
1)针对问题1),当将Word和CAD等软件中的内容复制到剪切板上后,是否可以将其以RTF格式读取并解析,获取其中的图形信息(主要是获取图形的实际宽度和高度),然后按符合图形实际高宽比的区域在应用程序A中的内容编辑功能模块中显示图形,这样就解决了图形变形的问题;
2)针对问题2),将应用程序A中包含特殊符号的内容转换为RTF格式,然后传递给应用程序B,这样Office控件就可以识别 RTF格式的内容并显示。
通过百度C#和RTF相关的内容,最终找到两个比较合适的开源项目:RtfDomParser和DotNetRtfWriter,其中RtfDomParser项目主要用于解析RTF格式的字符串,然后生成一个包含RTF元素的树结构;而DotNetRtfWriter项目主要用于创建RTF格式的字符串。先对这两个项目进行简要的介绍及代码应用测试。
解决方案之RtfDomParser[1]
RtfDomParser是个开源的C#类库,主要用于解析RTF格式内容并生成rtf文档结构树,该类库使用GNU2授权。

类库中最重要的类是RTFDomDocument,该类既用于解析RTF格式文件,也可解析RTF格式字符串,并将解析后的文档结构树保存到对象内容,该类提供的方法如下:

类库中提供了一个示例项目,项目名称为RtfDomParser.WinFormsDemo,该项目用WinForm的方式展示了如何使用该类库来解析RTF格式内容。我仿照该项目写了个测试程序,主要用来解析RichTextBox控件中的rtf格式内容(C#RichTextBox控件中有一个rtf属性,可以返回rtf格式的内容),还可以解析剪切板中的rft内容,测试窗口截图如下:

解决方案之DotNetRtfWriter
DotNetRtfWriter是一个开源的.Net类库,主要用于创建RTF文档。项目的源码地址为:https://github.com/elistia/DotNetRtfWriter
该类库中将RTF内容分为四类:

RTFParagraph类型:表示一段文本,可以设置字体大小、颜色,前景色、背景色等属性;
RTFSection类型:示例和说明中没有介绍,暂时不清楚这个类型该如何使用;
RTFTable类型:表示一个表格,可以设置表格行数、列数、格式、内容等属性;
RTFImage类型:表示一个图形,可以设置图形的来源和尺寸,但实际测试时没有将图形加载起来;
类库中最重要的类是RtfDocument类,该类表示一个RTF文档,它继承自RtfBlockList类。

使用RtfDocument类创建一个对象实例后,可以通过调用AddParagraph、AddImage、AddTable等方法向文档中增加文本、图像或表格。最终通过调用Save函数将文档内容保存为一个rtf格式的文档,或者调用render函数返回rtf格式的字符串,供其它模块使用。
本文测试时使用的是该类库自带的示例,效果如下图所示:

测试的时候对于在rtf文档中加图片还有点问题,根据它提供的示例无法把图片加到RichTextBox控件中,目前还在查找原因。    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C#.NET频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 1
看完这篇文章有何感觉?已经有2人表态,50%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved