过渡字段

过渡字段

本指南展示了如何在 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 文档属性字段

另请参阅

 中文