Campos de transición

Campos transicionales

Esta guía muestra cómo trabajar con tipos de campos transicionales — campos de código de barras heredados y de compatibilidad — en Aspose.Words FOSS para .NET.

Aspose.Words FOSS for .NET representa ciertos tipos de campos antiguos de Word a través de un conjunto dedicado de clases en el Aspose.Words.Fields espacio de nombres, llamado informalmente transitional campos. Estos son campos que preceden a los equivalentes posteriores de campos Open XML pero siguen siendo válidos dentro de .docx documentos abiertos desde fuentes heredadas. Cada tipo de campo transicional tiene su propia clase fuertemente tipada que deriva de Field, junto con el genérico Field objeto expuesto por Document.Range.Fields.


Campos de código de barras

Tres clases de campo generan o muestran datos de código de barras dentro de un documento: FieldBarcode (el campo BARCODE — un código de barras postal heredado con sus propias propiedades PostalAddress, IsBookmark, FacingIdentificationMark y IsUSPostalAddress), FieldDisplayBarcode (el campo DISPLAYBARCODE), y FieldMergeBarcode (el campo MERGEBARCODE, que también implementa IMergeFieldSurrogate para su uso durante la combinación de correspondencia). FieldDisplayBarcode y FieldMergeBarcode comparten las mismas propiedades de configuración de código de barras de propósito general — BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar y FixCheckDigit — propiedades que FieldBarcode no tiene.

La clase BarcodeParameters es un contenedor de paso que expone la unión de ambos conjuntos de propiedades (las propiedades de dirección postal y las propiedades de configuración general de código de barras), usado para pasar ajustes a un renderizador de códigos de barras, y IBarcodeGenerator es la interfaz que implementa un renderizador personalizado, exponiendo GetBarcodeImage(parameters) y el legado GetOldBarcodeImage(parameters). Itere Document.Range.Fields y verifique Field.Type contra FieldType.FieldBarcode, FieldType.FieldDisplayBarcode o FieldType.FieldMergeBarcode para localizar estos campos, luego convierta al tipo de campo específico — BarcodeValue y BarcodeType solo están disponibles después de convertir a FieldDisplayBarcode o FieldMergeBarcode, no a FieldBarcode.


Campos de compatibilidad heredados

Cuatro clases de campo adicionales cubren códigos de campo de Word más antiguos que son menos comunes en documentos recién creados pero que aún aparecen en archivos heredados .docx: FieldBidiOutline (el campo BIDIOUTLINE, para numeración de esquema de derecha a izquierda), FieldEQ (el campo de ecuación EQ, que también expone AsOfficeMath() para convertir su contenido en un objeto OfficeMath), FieldFootnoteRef (el campo FOOTNOTEREF, que hace referencia cruzada a una marca de nota al pie o nota final), y FieldInfo (el campo INFO, que lee o escribe una propiedad de información resumida del documento a través de sus propiedades InfoType y NewValue).

Cada una de estas clases de campo hereda la misma superficie Field: GetFieldCode() devuelve el texto del código subyacente del campo, Update() vuelve a evaluar el resultado del campo, Unlink() reemplaza el campo con su último resultado calculado, y Remove() elimina el campo del documento. IFieldCodeTokenInfoProvider está implementado por FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode y FieldInfo, ya que sus códigos de campo llevan interruptores estructurados más allá de una cadena de instrucción simple.


Consejos y Mejores Prácticas

  • Siempre verifique Field.Type antes de convertir un Field genérico a una de las clases de campo transicionales — una conversión incorrecta lanza un InvalidCastException.
  • Llame a Update() después de cambiar las propiedades de un campo de código de barras para que Result refleje la nueva configuración antes de que se guarde el documento.
  • FieldEQ.AsOfficeMath() solo tiene éxito cuando el campo EQ realmente codifica una ecuación; verifique que el Result del campo se asemeje a una fórmula antes de llamarlo.
  • Utilice Unlink() cuando desee congelar el valor actual de un campo como texto estático, descartando la capacidad de recalcularlo más tarde.
  • Las clases de campo de código de barras solo transportan datos — esta edición FOSS no incluye el motor de renderizado de códigos de barras, por lo que la salida de GetBarcodeImage() depende de la implementación de IBarcodeGenerator que proporcione.

Problemas comunes

ProblemaCausaCorregir
InvalidCastException al convertir un FieldSe asumió FieldType incorrectoVerifique Field.Type contra la constante FieldType correspondiente primero
FieldEQ.AsOfficeMath() devuelve resultados inesperadosEl campo no contiene una instrucción de ecuación válidaInspeccione la salida de GetFieldCode() antes de la conversión
El campo de código de barras no tiene imagen renderizadaNo se suministró una implementación de IBarcodeGeneratorProporcione un generador personalizado que implemente GetBarcodeImage()
El valor de FieldInfo no se actualizó después del cambio de NewValueCampo no actualizadoLlame a Update() en el campo después de modificar NewValue

FAQ

¿Qué significa “transitional” para estos tipos de campo?

No es una terminología oficial de Word — agrupa clases de campo en el espacio de nombres Aspose.Words.Fields de esta edición que implementan códigos de campo antiguos (códigos de barras y campos de compatibilidad pre-Open-XML) a través de sus propias clases fuertemente tipadas en lugar de manejarse solo mediante el objeto genérico Field.

¿Esta edición genera imágenes de códigos de barras?

No. FieldBarcode, FieldDisplayBarcode y FieldMergeBarcode contienen datos de códigos de barras y exponen la interfaz IBarcodeGenerator, pero no se incluye ningún motor de renderizado de códigos de barras incorporado en esta edición — usted proporciona su propia implementación de IBarcodeGenerator.

¿Puedo convertir un campo EQ en una ecuación OfficeMath?

Sí, a través de FieldEQ.AsOfficeMath(), siempre que el código del campo realmente codifique una ecuación.

¿Cómo encuentro todos los campos transicionales en un documento?

Enumere Document.Range.Fields y compare cada Field.Type con las constantes FieldType relevantes (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).


Resumen de API Reference

Clase / MétodoDescripción
FieldBarcodeImplementa el campo BARCODE
FieldDisplayBarcodeImplementa el campo DISPLAYBARCODE
FieldMergeBarcodeImplementa el campo de código de barras de combinación de correspondencia MERGEBARCODE
BarcodeParametersContenedor de la configuración de códigos de barras pasada a un generador
IBarcodeGeneratorInterfaz para un renderizador de imágenes de código de barras personalizado
FieldBidiOutlineImplementa el campo BIDIOUTLINE
FieldEQImplementa el campo de ecuación EQ; AsOfficeMath() se convierte en OfficeMath
FieldFootnoteRefImplementa el campo FOOTNOTEREF
FieldInfoImplementa el campo INFO de propiedad de documento

Ver también

 Español