过渡字段
过渡字段
本指南展示了如何在 Aspose.Words FOSS for .NET 中使用过渡字段类型——传统条码字段和兼容性字段。
Aspose.Words FOSS for .NET 表示某些较旧的 Word 字段类型,通过专用的一套类在 Aspose.Words.Fields 命名空间,非正式称为 transitional 字段。这些字段早于后来的 Open XML 字段等价物,但仍然在 .docx 从遗留来源打开的文档中仍然有效。每种过渡字段类型都有各自的强类型类,派生自 Field,以及通用的 Field 对象,由 Document.Range.Fields.
条码字段
文档中有三种字段类用于生成或显示条码数据:FieldBarcode(BARCODE 字段——一种具有自身 PostalAddress、IsBookmark、FacingIdentificationMark 和 IsUSPostalAddress 属性的传统邮政条码)、FieldDisplayBarcode(DISPLAYBARCODE 字段)以及 FieldMergeBarcode(MERGEBARCODE 字段,该字段还实现了用于邮件合并的 IMergeFieldSurrogate)。FieldDisplayBarcode 和 FieldMergeBarcode 共享相同的一般条码配置属性——BarcodeType、BarcodeValue、SymbolHeight、SymbolRotation、ScalingFactor、ForegroundColor、BackgroundColor、PosCodeStyle、CaseCodeStyle、ErrorCorrectionLevel、DisplayText、AddStartStopChar 和 FixCheckDigit——这些属性在 FieldBarcode 中不存在。
BarcodeParameters 类是一个直通容器,公开两套属性(邮政地址属性和通用条码配置属性)的合并,用于向条码渲染器传递设置;IBarcodeGenerator 是自定义渲染器实现的接口,公开 GetBarcodeImage(parameters) 和传统的 GetOldBarcodeImage(parameters)。遍历 Document.Range.Fields 并将 Field.Type 与 FieldType.FieldBarcode、FieldType.FieldDisplayBarcode 或 FieldType.FieldMergeBarcode 进行检查以定位这些字段,然后转换为具体的字段类——BarcodeValue 和 BarcodeType 仅在转换为 FieldDisplayBarcode 或 FieldMergeBarcode 后可用,而不是在 FieldBarcode 中。
传统兼容性字段
另外四个字段类覆盖了较旧的 Word 字段代码,这些代码在新创建的文档中较少见,但仍出现在遗留的 .docx 文件中:FieldBidiOutline(BIDIOUTLINE 字段,用于从右到左的大纲编号),FieldEQ(EQ 方程字段,它还公开 AsOfficeMath() 将其内容转换为 OfficeMath 对象),FieldFootnoteRef(FOOTNOTEREF 字段,用于交叉引用脚注或尾注标记),以及 FieldInfo(INFO 字段,通过其 InfoType 和 NewValue 属性读取或写入文档摘要信息属性)。
这些字段类中的每一个都继承相同的 Field 接口:GetFieldCode() 返回字段的底层代码文本,Update() 重新计算字段的结果,Unlink() 用上一次计算的结果替换字段,Remove() 从文档中删除该字段。IFieldCodeTokenInfoProvider 由 FieldBarcode、FieldDisplayBarcode、FieldMergeBarcode 和 FieldInfo 实现,因为它们的字段代码包含超出普通指令字符串的结构化开关。
提示与最佳实践
- 在将通用的
Field强制转换为过渡字段类之前,始终检查Field.Type—— 错误的转换会抛出InvalidCastException。 - 在更改条形码字段属性后调用
Update(),以便在文档保存之前Result反映新的配置。 FieldEQ.AsOfficeMath()仅在 EQ 字段实际编码为方程时才会成功;在调用之前请确认字段的Result看起来像公式。- 当您想将字段的当前值冻结为静态文本、并放弃以后重新计算的能力时,使用
Unlink()。 - 条形码字段类仅携带数据 —— 此 FOSS 版不包含条形码渲染引擎,因此
GetBarcodeImage()的输出取决于您提供的IBarcodeGenerator实现。
常见问题
| 问题 | 原因 | 修复 |
|---|---|---|
InvalidCastException 在将 Field 强制转换时 | 假设了错误的 FieldType | 先将 Field.Type 与匹配的 FieldType 常量进行检查 |
FieldEQ.AsOfficeMath() 返回意外的结果 | 字段未包含有效的方程指令 | 在转换之前检查 GetFieldCode() 输出 |
| 条形码字段没有渲染的图像 | 未提供 IBarcodeGenerator 实现 | 提供实现 GetBarcodeImage() 的自定义生成器 |
FieldInfo 值在 NewValue 更改后未更新 | 字段未刷新 | 在修改 NewValue 后对字段调用 Update() |
FAQ
“transitional” 对这些字段类型意味着什么?
这不是官方的 Word 术语——它在本版的 Aspose.Words.Fields 命名空间中对字段类进行分组,这些类通过各自的强类型类实现旧的字段代码(条形码和 Open-XML 之前的兼容字段),而不是仅通过通用的 Field 对象来处理。
此版本会渲染条形码图像吗?
不。FieldBarcode、FieldDisplayBarcode 和 FieldMergeBarcode 保存条形码数据并公开 IBarcodeGenerator 接口,但此版本不附带内置的条形码渲染引擎——您需要提供自己的 IBarcodeGenerator 实现。
我可以将 EQ 字段转换为 OfficeMath 方程吗?
可以,通过 FieldEQ.AsOfficeMath(),前提是该字段的代码实际上编码了一个方程。
我如何在文档中找到所有过渡字段?
枚举 Document.Range.Fields 并将每个 Field.Type 与相应的 FieldType 常量 (FieldBarcode、FieldDisplayBarcode、FieldMergeBarcode、FieldBidiOutline、FieldEQ、FieldFootnoteRef、FieldInfo) 进行比较。
API Reference 摘要
| 类 / 方法 | 描述 |
|---|---|
FieldBarcode | 实现 BARCODE 字段 |
FieldDisplayBarcode | 实现 DISPLAYBARCODE 字段 |
FieldMergeBarcode | 实现 MERGEBARCODE 邮件合并条形码字段 |
BarcodeParameters | 传递给生成器的条形码设置容器 |
IBarcodeGenerator | 自定义条形码图像渲染器的接口 |
FieldBidiOutline | 实现 BIDIOUTLINE 字段 |
FieldEQ | 实现 EQ 方程字段;AsOfficeMath() 转换为 OfficeMath |
FieldFootnoteRef | 实现 FOOTNOTEREF 字段 |
FieldInfo | 实现 INFO 文档属性字段 |