字段
字段在RadFlowDocument模型是保存数据的特殊结构,这些数据可以更改/更新——例如页码或合并字段。字段由字段代码和字段结果组成。字段代码片段定义了在更新字段时应该如何计算字段结果。字段结果片段保存最新的计算结果。在模型中,这两个片段被一种特殊类型的inline -分隔开FieldCharacter.FieldCharacters有3种类型:
- 开始:定义字段的开始。
- 结束:定义字段的结束。
- 单独的:分隔代码和结果片段。
之间的内联开始和单独的字段字符组成代码片段和之间的直线单独的和结束字段字符组成结果片段.
下面是简单的页面字段在文档中的样子:
在文档对象模型中,字段由场类的引用开始,单独的和结束与字段相关的字段字符。
支持字段
插入字段
插入字段的建议方法是使用InsertField ()的方法RadFlowDocumentEditor类。它负责创建和插入代码和结果片段,以及放置适当的字段字符来分隔它们。的InsertField ()方法的实例FieldInfo类。它保存了对起始、分隔和结束字段字符的引用,还提供了用于获取代码和结果片段以及更新字段的API。
示例1:使用RadFlowDocumentEditor创建一个包含Date字段的文档
RadFlowDocument = new RadFlowDocument();radflowdocumentteditor编辑器=新的radflowdocumentteditor(文档);编辑器。InsertField(“日期”、“«10/11/2012»”);
也可以手动创建和插入字段的所有部分FieldInfo实例,并将所有内联添加到文档结构中。示例2中所示的相同结果示例1.
示例2:使用RadDocument模型和FieldInfo创建一个包含Date字段的文档
//创建一个带有段落的文档RadFlowDocument = new RadFlowDocument();段落段落= document.Sections.AddSection().Blocks.AddParagraph();//创建字段信息。FieldInfo字段= new FieldInfo(文档);//创建并添加段落的所有内行。paragraph.Inlines.Add (field.Start);paragraph.Inlines.AddRun(“作者”);paragraph.Inlines.Add (field.Separator);paragraph.Inlines。AddRun("John Doe"); paragraph.Inlines.Add(field.End);
您可以看到,手动方法更冗长,更容易出错。如果没有插入所有字段字符,则结果为无效文档。使用RadFlowDocumentEditor另一方面,保证文档的完整性得到维护。
更新字段
RadWordsProcessing支持更新某些字段类型。当一个字段被更新时,它的结果片段将被计算结果值所替换。也场对应的属性FieldInfo对象的实例初始化场类匹配已识别的字段类型。
下面是支持更新的字段类型列表:
- 公式和表达式(公式和表达式以"="开头)
- 如果
- 比较
- 日期
- 时间
- 超链接
- 部分
如果字段类型不是上述类型之一,则不会更新结果,并且FieldInfo类的field属性将被设置为CustomCodeField的实例。字段代码的完整列表和每个字段代码的开关可以在多克斯规范.
更新PageRef, Page, NumPages和SectionPage字段。
在R3 2022中,上述油田被引入。它们的计算需要计算文档元素的大小。这就是为什么要更新它们,您需要提供的实现NumberingFieldsProvider它可以提供所需的布局逻辑。的布局逻辑RadPdfPRocessing图书馆。要使用它,您需要添加对以下程序集的引用:
- Telerik.Windows.Documents.Fixed
您可以使用以下代码注册提供程序:
示例3:注册默认的NumberingFieldsProvider
FlowExtensibilityManager。NumberingFieldsProvider= new NumberingFieldsProvider();
例4:更新字段
RadFlowDocumentEditor编辑器= new RadFlowDocumentEditor(new RadFlowDocument());FieldInfo =编辑器。InsertField("DATE \@ dd/MM/yyyy", "«result»");Console.WriteLine (fieldInfo.GetResult ());//输出:result fieldInfo.UpdateField();Console.WriteLine (fieldInfo.GetResult ());//输出:06/06/2014
请注意,字段结果不会在插入时自动更新。初始结果片段作为参数传递给InsertField ()方法。
文档中的所有字段都可以使用UpdateFields ()的RadFlowDocument.示例4说明如何使用此方法。
示例5:更新文档中的所有字段
RadFlowDocument = new RadFlowDocument();radflowdocumentteditor编辑器=新的radflowdocumentteditor(文档);FieldInfo =编辑器。InsertField("DATE \@ dd/MM/yyyy", "«result»");Console.WriteLine (fieldInfo.GetResult ());//输出:结果document.UpdateFields();Console.WriteLine (fieldInfo.GetResult ());//输出:06/06/2014
语法和开关
字段码的语法如下:
语法 |
---|
字段类型[field-argument](开关) |
字段类型:字段的类型。例如:HYPERLINK。
论点:域的参数。这是可选的,因为有些字段不需要参数。
开关:字段的一个或几个附加属性。
switch的语法如下:语法| |:——| |\ switch-character(switch-argument)|
switch-character:定义开关的字符。例如,HYPERLINK字段的“\o”开关定义了工具提示开关。
switch-argument:开关的参数。参数是可选的,因为并非所有开关都需要参数。
下面是一个字段代码的例子:
嵌套的字段
字段也可以彼此嵌套。如果在字段的代码片段中有嵌套字段,则在计算外部字段的结果时将使用它们的结果。
示例5创建一个字段,该字段将根据一天中的时间评估为适当的问候语。
示例6:创建一个嵌套字段
RadFlowDocumentEditor编辑器= new RadFlowDocumentEditor(new RadFlowDocument());//创建一个带有空代码片段的外部字段。FieldInfo outerFieldInfo = editor.InsertField(字符串。空,"if field result");//将编辑器移到字段开始字符之后。editor.MoveToInlineEnd (outerFieldInfo.Start);//创建一个嵌套TIME字段的代码片段。编辑器。InsertText(“如果”);编辑器。InsertField("TIME \@ HH", "时间字段结果"); editor.InsertText(" < 12 \"Good morning!\" \"Good afternoon!\""); outerFieldInfo.UpdateField(); Console.WriteLine(outerFieldInfo.GetResult()); // Output: Good afternoon!
当调用UpdateField()方法时,字段代码片段中的所有嵌套字段也会被更新。当使用RadFlowDocument的UpdateFields()方法时也是如此。
FieldInfo类
FieldInfo是处理字段时的主要入口点。它充当字段的开始、分隔和结束字段字符之间的“粘合剂”。每个字段字符还通过FieldInfo属性持有对其FieldInfo类的引用。
只有这样才能创造FieldCharacter是通过创造FieldInfo实例。为了保持文档的完整性,应该同时从文档中插入和删除所有字段字符。如果RadFlowDocumentEditor类用于插入-这是自动完成的。
FieldInfo公开处理字段的几个属性和方法:
- 开始:对起始字段字符的引用。
- 分隔符:分隔符字段字符的引用。
- 结束:对结束字段字符的引用。
- IsLocked:指定该字段是否被锁定。锁定的字段不更新。
- IsDirty:指定该字段在显示之前是否需要更新。在创建文档并且希望确保在应用程序打开文档时更新该字段时,此属性非常有用。
- UpdateField ():重新计算字段结果片段并更新field属性。
- GetCode ():以字符串的形式获取当前代码片段。
- GetResult ():以字符串的形式获取当前结果片段。
- 场获取与字段信息相关联的当前字段对象(例如DateField)。注意,每次字段更新时都会更新此属性。
将文档导出为DOCX格式时,可以使用IsDirty属性的单个字段或AutoUpdateFields属性的导出设置DocxFormatProvider,这将导致使用者在打开文档时更新字段。有关提供程序的导出设置的更多信息可用在这里.