Comment Travailler avec les Champs Transitoires dans .NET
Comment travailler avec les champs Transitional dans .NET
Aspose.Words FOSS pour .NET représente un groupe de types de champs Word anciens — champs de code-barres et une poignée de champs de compatibilité pré-Open-XML — via des classes dédiées dans le Aspose.Words.Fields espace de noms, appelés informellement transitional champs ici. Ce guide montre comment les trouver, les lire et les configurer. Chaque classe de champ transitionnel dérive du type de base Field type, aux côtés de l’objet générique Field exposé par Document.Range.Fields.
Guide étape par étape
Étape 1: Trouver les champs Transitional dans un document
Énumérez Document.Range.Fields et comparez la Type de chaque champ (une valeur FieldType) aux constantes pertinentes — FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef ou FieldInfo — puis convertissez le Field générique en la classe correspondante pour accéder à ses propriétés spécifiques. Vérifiez toujours Type avant la conversion: convertir vers la mauvaise classe de champ déclenche une InvalidCastException.
Étape 2: Configurer un champ DISPLAYBARCODE ou MERGEBARCODE
FieldDisplayBarcode (le champ DISPLAYBARCODE) et FieldMergeBarcode (le champ MERGEBARCODE, qui implémente également IMergeFieldSurrogate pour le publipostage) partagent le même ensemble de propriétés de configuration de code-barres : BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar et FixCheckDigit. Définissez-les sur l’instance du champ, puis appelez Update() afin que Result reflète la nouvelle configuration avant l’enregistrement du document.
Étape 3 : Lire les données du champ Legacy BARCODE (Postal)
FieldBarcode implémente le champ BARCODE plus ancien, qui est spécifiquement un champ de code-barres postal US (POSTNET) plutôt qu’un code-barres polyvalent — il ne partage pas les propriétés BarcodeType/BarcodeValue de l’Étape 2. À la place, il expose PostalAddress (l’adresse codée par le code-barres), FacingIdentificationMark, IsUSPostalAddress et IsBookmark. Vérifiez Field.Type par rapport à FieldType.FieldBarcode spécifiquement avant de lire ces propriétés, car convertir un champ DISPLAYBARCODE ou MERGEBARCODE en FieldBarcode n’exposerait pas les propriétés attendues.
Étape 4 : Rendre les images de code-barres avec un générateur personnalisé
Cette édition FOSS contient les données de champ code-barres mais n’inclut pas de moteur de rendu de code-barres. BarcodeParameters est le conteneur de transit qui consolide les paramètres de la famille de champs code-barres — les propriétés DISPLAYBARCODE/MERGEBARCODE de l’Étape 2 et les propriétés postales de l’Étape 3 — en un seul objet transmis à un moteur de rendu. Implémentez IBarcodeGenerator, exposant GetBarcodeImage(parameters) et le GetOldBarcodeImage(parameters) hérité, pour fournir le rendu réel de l’image; sans implémentation fournie, les champs code-barres ne transportent que des données de configuration.
Étape 5 : Travailler avec les champs de compatibilité hérités
Quatre autres classes couvrent d’anciens codes de champ encore présents dans les fichiers legacy .docx. FieldBidiOutline implémente le champ BIDIOUTLINE pour la numérotation d’outline de droite à gauche et n’expose aucune propriété au-delà de la surface commune Field. FieldEQ implémente le champ d’équation EQ et expose en plus AsOfficeMath() pour convertir son contenu en objet OfficeMath — cela ne réussit que lorsque le champ encode réellement une équation. FieldFootnoteRef implémente le champ FOOTNOTEREF, qui fait référence croisée à une marque de note de bas de page ou de fin, et n’expose également aucune propriété au-delà de la surface commune Field. FieldInfo implémente le champ INFO, lisant ou écrivant une propriété d’information de résumé du document via ses propriétés InfoType et NewValue.
Étape 6 : Mettre à jour ou figer la valeur d’un champ transitionnel
Chaque classe de champ transitionnel hérite de GetFieldCode() (le texte de code sous-jacent du champ), Update() (réévalue le résultat), Unlink() (remplace le champ par son dernier résultat calculé sous forme de texte statique), et Remove() (supprime le champ). Appelez Update() après avoir modifié la configuration de n’importe quel champ afin que Result reflète le changement, et utilisez Unlink() lorsqu’il faut figer la valeur actuelle d’un champ plutôt que de la laisser recalculable.
Problèmes courants et solutions
InvalidCastException lors du transtypage d’un Field vers une classe de champ transitionnel. Le mauvais FieldType a été supposé. Vérifier Field.Type par rapport à la correspondance FieldType constante avant le casting.
A DISPLAYBARCODE/MERGEBARCODE les propriétés du champ sont manquantes après le casting. Le champ a été casté en FieldBarcode au lieu de FieldDisplayBarcode/FieldMergeBarcode (ou inversement) — ces classes exposent des ensembles de propriétés différents bien que les trois représentent des données de code-barres. Confirmer Field.Type avant le transtypage.
Les champs de code-barres contiennent des données mais aucune image ne s’affiche. Non IBarcodeGenerator Aucune implémentation n’a été fournie. Fournissez un générateur personnalisé implémentant GetBarcodeImage(parameters) — cette édition ne fournit pas de moteur de rendu de code-barres intégré.
FieldEQ.AsOfficeMath() renvoie des résultats inattendus. Le champ ne contient pas d’instruction d’équation valide. Inspectez le champ GetFieldCode() la sortie avant de tenter la conversion.
FieldInfo’s value n’est pas mise à jour après la définition NewValue. Le champ n’a pas été rafraîchi après la modification. Call Update() sur le champ après modification NewValue.
Foire aux questions
Que signifie “transitional” pour ces types de champs?
Ce n’est pas une terminologie officielle de Word — cela regroupe les classes de champs dans l’espace de noms Aspose.Words.Fields de cette édition qui implémentent les anciens codes de champ (champs de code-barres et champs de compatibilité pré-Open-XML) via leurs propres classes fortement typées plutôt que d’être gérés uniquement via l’objet générique Field.
Est-ce que FieldBarcode utilise les mêmes propriétés que FieldDisplayBarcode?
Non. FieldBarcode implémente le champ hérité BARCODE (postal/POSTNET) et expose PostalAddress, FacingIdentificationMark, IsUSPostalAddress et IsBookmark. FieldDisplayBarcode et FieldMergeBarcode partagent un ensemble de propriétés différent — BarcodeType, BarcodeValue, SymbolHeight et les paramètres de rendu associés.
Cette édition génère-t-elle des images de code-barres?
Non. FieldBarcode, FieldDisplayBarcode et FieldMergeBarcode contiennent les données de configuration du code-barres et exposent l’interface IBarcodeGenerator, mais aucun moteur de rendu de code-barres n’est fourni dans cette édition — une implémentation personnalisée de IBarcodeGenerator est nécessaire pour produire une image.
Puis-je convertir un champ EQ en une équation OfficeMath?
Oui, via FieldEQ.AsOfficeMath(), à condition que le code du champ encode réellement une équation.
Comment puis-je trouver tous les champs transitoires dans un document?
Énumérez Document.Range.Fields et comparez chaque Field.Type aux constantes FieldType pertinentes (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).