如何在 .NET 中使用过渡字段

如何在 .NET 中使用过渡字段

如何在 .NET 中使用过渡字段

Aspose.Words FOSS for .NET 代表一组较旧的 Word 字段类型——条码字段以及少量 pre-Open-XML 兼容字段——通过专用类在 the Aspose.Words.Fields 命名空间,非正式称为 transitional 字段在此。本指南展示了如何查找、读取和配置它们。每个过渡字段类都派生自 base Field 类型,同时还有通用的 generic Field object 由 Document.Range.Fields.


分步指南

步骤 1:在文档中查找过渡字段

遍历 Document.Range.Fields 并将每个字段的 Type(一个 FieldType 值)与相关常量——FieldBarcode、FieldDisplayBarcode、FieldMergeBarcode、FieldBidiOutline、FieldEQ、FieldFootnoteRef 或 FieldInfo——进行比较,然后将通用的 Field 强制转换为匹配的类以访问其特定属性。转换前务必检查 Type:将字段转换为错误的类会抛出 InvalidCastException。


步骤 2:配置 DISPLAYBARCODE 或 MERGEBARCODE 字段

FieldDisplayBarcode(DISPLAYBARCODE 字段)和 FieldMergeBarcode(MERGEBARCODE 字段,且实现了用于邮件合并的 IMergeFieldSurrogate)共享相同的一套条形码配置属性:BarcodeType、BarcodeValue、SymbolHeight、SymbolRotation、ScalingFactor、ForegroundColor、BackgroundColor、PosCodeStyle、CaseCodeStyle、ErrorCorrectionLevel、DisplayText、AddStartStopChar和FixCheckDigit。在字段实例上设置这些属性,然后调用 Update(),以便在保存文档之前让 Result 反映新的配置。


步骤 3:读取旧版条形码(邮政)字段数据

FieldBarcode 实现了较旧的 BARCODE 字段,该字段专门是美国邮政条形码(POSTNET)字段,而不是通用条形码——它不共享步骤 2 中的 BarcodeType/BarcodeValue 属性。相反,它公开了 PostalAddress(条形码编码的地址)、FacingIdentificationMark、IsUSPostalAddress 和 IsBookmark。在读取这些属性之前,请特别将 Field.Type 与 FieldType.FieldBarcode 对比,因为将 DISPLAYBARCODE 或 MERGEBARCODE 字段强制转换为 FieldBarcode 将不会暴露您期望的属性。


步骤 4:使用自定义生成器渲染条形码图像

此 FOSS 版携带条形码字段数据,但不包含条形码渲染引擎。BarcodeParameters 是一个直通容器,它将来自任一条形码字段系列的设置——步骤 2 中的 DISPLAYBARCODE/MERGEBARCODE 属性以及步骤 3 中的邮政属性——合并为一个交给渲染器的单一对象。实现 IBarcodeGenerator,公开 GetBarcodeImage(parameters) 和旧版的 GetOldBarcodeImage(parameters),以提供实际的图像渲染;如果未提供实现,条形码字段仅携带配置数据。


步骤 5:使用旧版兼容字段

另外还有四个类覆盖了仍然存在于旧版 .docx 文件中的旧字段代码。FieldBidiOutline 实现了用于从右到左大纲编号的 BIDIOUTLINE 字段,并且除了通用的 Field 表面外不公开任何属性。FieldEQ 实现了 EQ 方程字段,并额外公开 AsOfficeMath(),用于将其内容转换为 OfficeMath 对象——仅当字段实际编码了方程时才会成功。FieldFootnoteRef 实现了 FOOTNOTEREF 字段,该字段交叉引用脚注或尾注标记,同样除通用的 Field 表面外不公开属性。FieldInfo 实现了 INFO 字段,通过其 InfoType 和 NewValue 属性读取或写入文档摘要信息属性。


步骤 6:更新或冻结过渡字段的值

每个过渡字段类都会继承 GetFieldCode()(字段的底层代码文本)、Update()(重新计算结果)、Unlink()(将字段替换为其最后计算得到的静态文本),以及 Remove()(删除字段)。在更改任意字段的配置后调用 Update(),以使 Result 反映更改;当字段的当前值应被冻结而不再可重新计算时,使用 Unlink()。


常见问题与解决方案

InvalidCastException 在 casting a 时 Field 转换为 a transitional field class。 错误的 FieldType 被假设。检查 Field.Type 针对匹配项 FieldType 常量在转换之前。

A DISPLAYBARCODE/MERGEBARCODE 字段的属性在转换后缺失。 字段被转换为 FieldBarcode 而不是 FieldDisplayBarcode/FieldMergeBarcode (或相反) — 这些类暴露不同的属性集,尽管这三者都表示条形码数据。请确认 Field.Type 在强制转换之前。

条形码字段携带数据,但未渲染图像。 否 IBarcodeGenerator 已提供实现。请提供一个自定义生成器来实现 GetBarcodeImage(parameters) — 此版本不包含内置的条形码渲染引擎。

FieldEQ.AsOfficeMath() 返回意外的结果。 该字段不包含有效的方程指令。检查字段的 GetFieldCode() 在尝试转换之前检查输出。

FieldInfo在设置后,值未更新 NewValue. 更改后字段未刷新。Call Update() 在修改后对字段进行 NewValue.


常见问题

“transitional” 对这些字段类型意味着什么?

这不是官方的 Word 术语——它在本版的 Aspose.Words.Fields 命名空间中对字段类进行分组,这些类通过各自的强类型类实现旧的字段代码(barcode fields 和 pre-Open-XML 兼容字段),而不是仅通过通用的 Field 对象处理。

FieldBarcode 使用与 FieldDisplayBarcode 相同的属性吗?

不。FieldBarcode 实现了旧版的 BARCODE(postal/POSTNET)字段,并公开了 PostalAddress、FacingIdentificationMark、IsUSPostalAddress 和 IsBookmark。FieldDisplayBarcode 和 FieldMergeBarcode 共享一套不同的属性——BarcodeType、BarcodeValue、SymbolHeight 以及相关的渲染设置。

此版本会渲染条码图像吗?

不。FieldBarcode、FieldDisplayBarcode 和 FieldMergeBarcode 保存条码配置数据并公开 IBarcodeGenerator 接口,但此版本未随附条码渲染引擎——需要自定义的 IBarcodeGenerator 实现才能生成图像。

我可以将 EQ 字段转换为 OfficeMath 方程吗?

是的,通过 FieldEQ.AsOfficeMath(),前提是该字段的代码实际上编码了一个方程。

我如何在文档中找到所有过渡字段?

枚举 Document.Range.Fields 并将每个 Field.Type 与相应的 FieldType 常量 (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo) 进行比较。


另请参阅

 中文