/// 打开文件 /// /// ///
4.1.8. Printing
Printing是打印相关的功能模块。
4.1.9. Security
Security是安全和授权相关的模块,是实现痕迹保留和权限等级的基础。
4.2. 文档视图的度量和坐标
DCWriter的文档视图的度量单位是System.Drawing.GraphicsUnit.Document,也就是三百
分之一英寸,而没采用和设备相关的像素单位,这样就能实现所见即所得了。
由于.NET框架中描述打印相关的度量单位就是百分之一英寸为单位,为此DCWriter的页面设置中采用是的百分之一英寸为单位的。因此文档对象的纸张大小、页边距等都是采用百分之一英寸为单位的。
默认情况下,DCWriter文档采用A4大小的纸张,也就是宽度827个单位(8.27英寸)、高度1169个单位(11.69英寸),采用纵向打印模式,页边距都是100个单位(1英寸)。页眉顶端距离纸张上边缘为50个单位(0.5英寸),页脚低端距离纸张下边缘为50个单位(0.5英寸)。
4.3. 文档内容样式开发接口
在大部分情况下,开发者想要改变文档内容,都是通过调用编辑器命令的方式来实现的,关于编辑器命令可参考后面的相关章节。
DCWriter支持复杂的文档内容样式,包括字体、颜色、边框、对齐方式等等。DCWriter中是集中管理文档样式信息,并且文档元素引用文档样式。
文档对象XTextDocument有一个签名为“public DCSoft.Writer.Dom.DocumentContentStyleContainer ContentStyles{get;set;}”的属性。该属性值就是文档内容样式容器,DocumentContentStyleContainer类型主要属性有 public DCSoft.Drawing.ContentStyle Default{get;set;}
文档默认样式,它实际上返回一个类型为DCSoft.Writer.Dom.DocumentContentStyle的对象实例。
public DCSoft.Drawing.ContentStyleList Styles{get;set;}
文档中所有样式的列表,该列表元素成员类型实际上是DCSoft.Writer.Dom.DocumentContentStyle。
DCWriter文档元素都是从XTextElement类型派生的,XTextElement类型有一个签名为“public virtual int StyleIndex{get;set;}”的属性,该属性值就是其引用的文档样式编号,因此可以使用代码“document.ContentStyles.Styles[ element.StyleIndex]”获得文档元素引用的文档内容样式;若StyleIndex为-1或者其他不合理的值,则文档元素引用默认样式,也就是document.ContentStyles.Default的值。
注意:当文档在一个编辑器控件中显示和编辑时,文档的默认字体就自动设置为编辑器控件的字体;文档的默认文本颜色就自动设置为编辑器的前景色。这个过程是自动的,外界即使修改了文档的默认属性也是没有用的。
XTextElement类型有一个签名为“public DocumentContentStyle Style{get;set;}”的属性就是返回改文档元素引用的内容样式对象。
文档元素在实际使用文档内容样式时不会直接使用其引用的文档样式,而是先将文档样式和文档默认样式进行合并,再使用它。为此XTextElement类型有一个签名为“public DocumentContentStyle RuntimeStyle{get;}”的属性来返回这个运行时实际使用的文档样式。
DocumentContentStyle类型主要属性有 背景相关属性
public System.Drawing.Color BackgroundColor{get;set;}
背景色。默认为透明色。
public DCSoft.Drawing.XImageValue BackgroundImage{get;set;} 背景图片。
public System.Drawing.ContentAlignment BackgroundPosition{get;set;}
背景对齐方式。
public float BackgroundPositionX{get;set;} 背景X轴方向偏移量。
Public float BackgroundPositionY{get;set;} 背景Y轴方向偏移量。
public bool BackgroundRepeat{get;set;} 是否重复绘制背景。 文字相关属性
public System.Drawing.Color Color{get;set;} 文字颜色。
public DCSoft.Drawing.XFontValue Font{get;set;} 字体。
public string FontName{get;set;}
字体名称,默认为系统默认字体名称。 public float FontSize{get;set;} 字体大小,默认为9。 public bool Italic{get;set;} 斜体,默认为false。 public bool Underline{get;set;} 下划线,默认为false。 public bool Strikeout{get;set;} 删除线,默认为false。 public bool Bold{get;set;} 粗体。
public bool Superscript{get;set;} 上标样式,默认为false。 public bool Subscript{get;set;} 下标样式,默认为false。 public float Spacing{get;set;} 字符间距,默认为0。 边框相关属性
public bool BorderLeft{get;set;}
是否显示左边框线,默认为false。 public bool BorderTop{get;set;} 是否显示上边框线,默认为false。 public bool BorderRight{get;set;} 是否显示右边框线,默认为false。 public bool BorderBottom{get;set;} 是否显示下边框线,默认为false。 public float BorderWidth{get;set;} 边框线粗细,默认为0。
public System.Drawing.Drawing2D.DashStyle BorderStyle{get;set;} 边框线样式,默认为Solid。 public float BorderSpacing{get;set;}
边框线间距,默认为0,仅适用于段落。 public float PaddingLeft{get;set;} 左内边距,默认为0。 public float PaddingTop{get;set;} 上内边距,默认为0。
public float PaddingRight{get;set;} 右内边距,默认为0。
public float PaddingBottom{get;set;} 下内边距,默认为0。 段落相关属性
public bool BulletedList{get;set;} 段落是否采用圆点式列表方式。 public bool NumberedList{get;set;}
段落是否采用数字式列表方式。
public DCSoft.Drawing.DocumentContentAlignment Align{get;set;} 段落对齐方式。可选值有Left,Center,Right,Justify,默认为Left。 public float SpacingBeforeParagrah{get;set;}
段落前间距,默认为0。
public float SpacingAfterParagraph{get;set;} 段落后间距,默认为0。 public float LineSpacing{get;set;} 行间距。
public DCSoft.Drawing.LineSpacingStyle LineSpacingStyle{get;set;} 行间距样式,它决定了LineSpacing属性值的意义,其可选值为 SpaceSingle Space1pt5 SpaceDouble SpaceExactly SpaceSpecify 单倍行距,此时LineSpacing值无意义。 1.5倍行距,此时LineSpacing值无意义。 双倍行距,此时LineSpacing值无意义。 最小值,此时LineSpacing值无意义。 固定值,此时LineSpacing指定了行间距。 注意在DCWriter中,行间距是文本行的上边缘和下行的上边缘之间的距离,而不是本行下边缘和下一行上边缘之间的距离,因此算是行高。 多倍行距,此时LineSpacing指定的倍数。 public DCSoft.Drawing.VerticalAlignStyle VerticalAlign{get;set;} 文本垂直对齐方式。仅适用于表格单元格。 public float FirstLineIndent{get;set;} 段落首行缩进量。
public float LeftIndent{get;set;} 段落左缩进量。 授权相关
public int CreatorIndex{get;set;}
创建文档内容的创建者历史记录编号,默认为-1。 public int DeleterIndex{get;set;} 删除文档内容的删除这历史记录编号,默认为-1。
SpaceMultiple
4.3.1. 修改文档样式
由于具有运行时的文档样式,因此当应用程序只是修改了文档的默认样式,则整个文档所有元素的样式也会随着更换。
由于采用样式列表引用的方式来设置文档元素的样式,因此不能直接修改文档元素的样式设置,例如执行“element.Style.Bold = true”这样的代码是错误的。而是需要执行以下代码: DocumentContentStyle style = new DocumentContentStyle(); style.Bold = true; element.Style = style; 也就是开发者不能直接设置元素的element.Style下面的设置,而必须创建一个新的DocumentContentStyle对象,然后设置它的值,最后将其设置到文档元素的Style属性值上。而且这种方法运行速度快,但只是更新了文档DOM结构,最后还必须调用编辑器控件的RefreshDocument方法更新文档视图,而且不能调用Undo/Redo命令重复和撤销操作。
4.4. 权限和痕迹保留开发接口
DCSoft.Writer支持文档内容等级权限控制。在打开文档后用户可以在编辑器中执行登录操作,每一次用户登录都系统都记录用户名和用户授权等级。此时新增、修改或逻辑删除的内容都归于当前用户名下。 操作控制
对于开发人员来说,用户授权等级就是一个整数,该数值越大,用户等级越高。在一篇文档内部,高等级用户制造的文档内容对低等级的用户来说是只读的,只能看不能修改。而低等级用户制造的文档内容高等级用户是可以查看和修改、删除的。 可视化显示
另外编辑器还能可视化的显示用户操作痕迹。对于等级小于等于0的用户,其内容正常显示;对于权限等级为1的用户,其插入的文档内容使用蓝色的单下划线来突出显示,其逻辑删除的内容使用红色的单条删除线来突出显示;对于权限等级大于等于2的用户,其插入的内容使用蓝色双下划线来突出显示,其逻辑删除的内容使用红色的双删除线来突出显示。
当鼠标停留在到文档内容上时,会显示一个提示标签,说明文档内容的创建信息和被逻辑删除的信息。
这样文档的权限控制从传统的文件级别深入到文档内部,这成为电子病历应用系统实现三级查房功能的技术基础。相信其他行业应用也可能存在类似的需求。 权限及痕迹数据的存储
应用程序可以通过DCSoft.Writer提供的DOM结构直接访问权限和痕迹信息。
文档对象是DCSoft.Writer.Dom.XTextDocument类型,它具有以下和痕迹和权限相关属性:
public DCSoft.Writer.Dom.DocumentContentStyleContainer ContentStyles{get;set;}
整个文档都使用的文档内容样式容器。该对象的Styles属性就是一个文档样式列表,其列表元素类型是DCSoft.Writer.Dom.DocumentContentStyle。该类型中权限相关的属性有
public int CreatorIndex{get;set;} 创建该文档元素的用户历史记录编号。系统使用该编号在文档对象的UserHistories列表中检索用户登录操作历史记录对象。