XTextElementXTextCharElementXTextObjectElementXTextCheckBoxElementBaseXTextCheckBoxElementXTextImageElementXTextContainerElementXTextDocumentXTextContentElementXTextTableCellElementXTextDocumentContentElementXTextDocumentBodyElementXTextDocumentHeaderElementXTextDocumentFooterElementXTextFieldElementXTextInputFieldElementBaseXTextInputFieldElementXTextShapeInputFieldElementXTextBarcodeFieldElementXTextMedicalExpressionFieldElementXTextTableElementXTextTableRowElementXTextTableColumnElementXTextPageBreakElementXTextLineBreakElementXTextEOFElementXTextParagraphFlagElementXTextFieldBorderElement
通过这个图可以看出,文档中所有的内容都可以用文档元素表示,所有的文档元素都是从XTextElement类型派生出来的,由于DCWriter支持比较复杂的文档结构,因此定义了很多文档元素类型来实现所需的功能。
下图为DCWriter中DOM模块的对象组织结构图:
XTextDocumentHeaderElementsBodyElementsFooterElementsContentStylesDefaultStylesStyle0CreatorIndexDeleterIndexStyle1Style2StyleNDocumentControlerServerObjectInfoUserHistoriesHistory0History1History2HistoryNPageSettingsParametersOptionsSecurityOptionsViewOptionsBehaviorOptionsElement0StyleIndexElement1Element2ElementN
在这个DOM结构图中,XTextDocument对象是根节点,表示整个文档,是其他模块和应用程序访问DOM结构的唯一入口点。XTextDocument对象包含了很多成员,比如Body成员表示文档的正文内容,下面有若干个Element成员表示文档中的一个个片段内容。
在这个图形中带箭头的虚线表示文档元素的样式和授权控制管理信息。
EditOptions4.1.1.1. 直接操作DOM结构
开发人员可以直接编写代码操作DOM结构。往DOM树状结构添加删除内容。如下代码: XTextDocument document = myEditControl.Document ; ContentBuilder bulder = new ContentBuilder(document.Header);
DocumentContentStyle dcs = new DocumentContentStyle(); dcs.FontSize = 20; dcs.Color = System.Drawing.Color.Red; bulder.Append(\这是一段页眉 第\,dcs); XTextPageInfoElement pi = new XTextPageInfoElement(); pi.ContentType = PageInfoContentType.PageIndex; pi.StyleIndex = document.ContentStyles.GetStyleIndex(dcs); bulder.Append( pi ); bulder.Append(\共 页\, dcs); XTextPageInfoElement pc = new XTextPageInfoElement(); pc.ContentType = PageInfoContentType.NumOfPages; pc.StyleIndex = document.ContentStyles.GetStyleIndex(dcs); bulder.Append( pc ); bulder.Append(\页\, dcs); dcs = new DocumentContentStyle(); dcs.Align = DocumentContentAlignment.Center; bulder.SetParagraphStyle(dcs); bulder = new ContentBuilder(document.Body); dcs = new DocumentContentStyle(); dcs.Color = System.Drawing.Color.Yellow; bulder.Append(\这是文档正文内容\, dcs); bulder.AppendParagraphFlag(); dcs = new DocumentContentStyle(); dcs.FontSize = 40; bulder.Append(\页面第二行\, dcs); bulder = new ContentBuilder(document.Footer); dcs = new DocumentContentStyle(); dcs.FontSize = 30; dcs.Color = System.Drawing.Color.Blue; bulder.Append(\这是页脚内容\, dcs); myEditControl.Document.ContentStyles.Default.FontSize = 40; myEditControl.Document.ContentStyles.Default.Color = System.Drawing.Color.Tomato; myEditControl.RefreshDocument(); 在这里,文档对象的Header、Footer、Body属性分别表示页眉、页脚、和正文部分,都是容器元素。理论上说开发者可以直接操作容易元素的Elements列表,但操作复杂,而且容易出错。
为此DCWriter提供了一个文档内容创建器,类型为DCSoft.Writer.ContentBuidler。在这段例子代码就使用了ContentBuilder。ContentBuilder类型成员有: public ContentBuilder( XTextContainerElement container ) 对象构造函数,参数为添加内容的容器元素对象。 public DocumentContentStyle ContentStyle{get;set;}
默认文档内容样式。
public DocumentContentStyle ParagraphStyle{get;set;} 默认的段落样式。 public void Clear( )
清空内容。
public void SetParagraphStyle(DocumentContentStyle style) 设置段落样式。
public XTextElementList Append(string text, DocumentContentStyle style) 添加文档内容,第二个参数为指定的文档内容样式。 public XTextElementList Append(string text )
以默认的样式添加文档内容。
public XTextParagraphFlagElement AppendParagraphFlag(DocumentContentStyle style) 添加段落。
public XTextParagraphFlagElement AppendParagraphFlag( ) 以默认的段落样式添加段落。
public void Append(XTextElement element) 添加文档内容。
public void Append(XTextElementList elements) 添加多个文档元素对象。
4.1.2. Render
Render是文本文档内容呈现器。它负责绘制和渲染文档内容,根据DOM中的结构和数据在用户界面上和打印机上面绘制文档内容。
4.1.3. GUI
GUI是DCWriter的用户界面层。包括文本编辑器控件,一些文档元素数据编辑器等等。它是绘制文档内容的容器,此外还接受鼠标和键盘操作,调用Commands模块来访问DOM,当修改了DOM的内容后,会调用Render模块来重新绘制用户界面,更新文档视图。
4.1.4. File Format Converter
文件格式转换模块,负责将DOM中的文档数据转换为XML、RTF或HTML文档格式,也可以解析XML、RTF文档并生成DOM文档结构。
4.1.5. Commands
该模块是操作命令模块,定义了用户界面层可用的命令。这样上层应用程序不用直接操作复杂的DOM结构,而是指定名称通过命令的方式操作DOM结构。