你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / C专栏
C#使用开源类库解析和生成rtf格式内容的问题讲解
 

问题描述

自己项目组开发的应用程序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控件中,目前还在查找原因

  推荐精品文章

·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 
·2023年7月目录
·2023年6月目录 
·2023年5月目录
·2023年4月目录 
·2023年3月目录 
·2023年2月目录 
·2023年1月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089