Cómo trabajar con campos transitorios en .NET
Cómo trabajar con campos transicionales en .NET
Aspose.Words FOSS para .NET representa un grupo de tipos de campo antiguos de Word — campos de código de barras y un puñado de campos de compatibilidad pre-Open-XML — a través de clases dedicadas en el Aspose.Words.Fields espacio de nombres, llamado informalmente transitional campos aquí. Esta guía muestra cómo encontrar, leer y configurarlos. Cada clase de campo transicional deriva del tipo base Field tipo, junto al genérico Field objeto expuesto por Document.Range.Fields.
Guía paso a paso
Paso 1: Encontrar campos transicionales en un documento
Enumere Document.Range.Fields y compare el Type de cada campo (un valor FieldType) con las constantes relevantes — FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef o FieldInfo — luego convierta el Field genérico a la clase coincidente para acceder a sus propiedades específicas. Siempre verifique Type antes de convertir: convertir a la clase de campo incorrecta lanza un InvalidCastException.
Paso 2: Configurar un campo DISPLAYBARCODE o MERGEBARCODE
FieldDisplayBarcode (el campo DISPLAYBARCODE) y FieldMergeBarcode (el campo MERGEBARCODE, que también implementa IMergeFieldSurrogate para combinación de correspondencia) comparten el mismo conjunto de propiedades de configuración de código de barras: BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar y FixCheckDigit. Establezca estas en la instancia del campo, luego llame a Update() para que Result refleje la nueva configuración antes de guardar el documento.
Paso 3: Leer datos del campo BARCODE (Postal) heredado
FieldBarcode implementa el campo BARCODE más antiguo, que es específicamente un campo de código de barras postal de EE. UU. (POSTNET) en lugar de un código de barras de propósito general — no comparte las propiedades BarcodeType/BarcodeValue del Paso 2. En su lugar expone PostalAddress (la dirección que codifica el código de barras), FacingIdentificationMark, IsUSPostalAddress y IsBookmark. Verifique Field.Type contra FieldType.FieldBarcode específicamente antes de leer estas propiedades, ya que convertir un campo DISPLAYBARCODE o MERGEBARCODE a FieldBarcode no expondría las propiedades que espera.
Paso 4: Renderizar imágenes de código de barras con un generador personalizado
Esta edición FOSS lleva datos de campo de código de barras pero no incluye un motor de renderizado de códigos de barras. BarcodeParameters es el contenedor de paso que consolida configuraciones de cualquiera de las familias de campos de código de barras — las propiedades DISPLAYBARCODE/MERGEBARCODE del Paso 2 y las propiedades postales del Paso 3 — en un solo objeto entregado a un renderizador. Implemente IBarcodeGenerator, exponiendo GetBarcodeImage(parameters) y el legado GetOldBarcodeImage(parameters), para proporcionar el renderizado real de la imagen; sin una implementación suministrada, los campos de código de barras solo transportan datos de configuración.
Paso 5: Trabajar con campos de compatibilidad heredados
Cuatro clases adicionales cubren códigos de campo más antiguos que aún se encuentran en archivos .docx heredados. FieldBidiOutline implementa el campo BIDIOUTLINE para numeración de contorno de derecha a izquierda y no expone propiedades más allá de la superficie común Field. FieldEQ implementa el campo de ecuación EQ y además expone AsOfficeMath() para convertir su contenido en un objeto OfficeMath — esto solo tiene éxito cuando el campo realmente codifica una ecuación. FieldFootnoteRef implementa el campo FOOTNOTEREF, que hace referencia cruzada a una marca de nota al pie o nota final, y también no expone propiedades más allá de la superficie común Field. FieldInfo implementa el campo INFO, leyendo o escribiendo una propiedad de resumen de información del documento a través de sus propiedades InfoType y NewValue.
Paso 6: Actualizar o congelar el valor de un campo transicional
Cada clase de campo transicional hereda GetFieldCode() (el texto subyacente del código del campo), Update() (recalcula el resultado), Unlink() (reemplaza el campo con su último resultado calculado como texto estático) y Remove() (elimina el campo). Llame a Update() después de cambiar la configuración de cualquier campo para que Result refleje el cambio, y use Unlink() cuando el valor actual de un campo debe congelarse en lugar de seguir siendo recalculable.
Problemas comunes y soluciones
InvalidCastException al convertir un Field a una clase de campo transicional. Lo incorrecto FieldType se asumió. Verifique Field.Type contra la coincidencia FieldType constante antes de la conversión.
A DISPLAYBARCODE/MERGEBARCODE faltan las propiedades del campo después de la conversión. El campo se convirtió a FieldBarcode en lugar de FieldDisplayBarcode/FieldMergeBarcode (o viceversa) — estas clases exponen diferentes conjuntos de propiedades aunque los tres representan datos de código de barras. Confirme Field.Type antes de hacer casting.
Los campos de código de barras contienen datos pero no se genera ninguna imagen. No IBarcodeGenerator no se proporcionó una implementación. Proporcione un generador personalizado que implemente GetBarcodeImage(parameters) — esta edición no incluye un motor de renderizado de códigos de barras integrado.
FieldEQ.AsOfficeMath() devuelve resultados inesperados. El campo no contiene una instrucción de ecuación válida. Inspeccione el campo GetFieldCode() salida antes de intentar la conversión.
FieldInfoEl valor no se actualiza después de establecerlo NewValue. El campo no se actualizó después del cambio. Llama Update() en el campo después de modificar NewValue.
Preguntas Frecuentes
¿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 más antiguos (campos de código 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.
¿FieldBarcode usa las mismas propiedades que FieldDisplayBarcode?
No. FieldBarcode implementa el campo heredado BARCODE (postal/POSTNET) y expone PostalAddress, FacingIdentificationMark, IsUSPostalAddress y IsBookmark. FieldDisplayBarcode y FieldMergeBarcode comparten un conjunto de propiedades diferente — BarcodeType, BarcodeValue, SymbolHeight y configuraciones de renderizado relacionadas.
¿Esta edición renderiza imágenes de códigos de barras?
No. FieldBarcode, FieldDisplayBarcode y FieldMergeBarcode contienen datos de configuración de códigos de barras y exponen la interfaz IBarcodeGenerator, pero no se incluye ningún motor de renderizado de códigos de barras en esta edición — se requiere una implementación personalizada de IBarcodeGenerator para generar una imagen.
¿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).