Champs de transition
Champs transitoires
Ce guide montre comment travailler avec les types de champs transitoires — les champs de code-barres hérités et les champs de compatibilité — dans Aspose.Words FOSS pour .NET.
Aspose.Words FOSS pour .NET représente certains anciens types de champs Word via un ensemble dédié de classes dans le Aspose.Words.Fields espace de noms, appelé informellement transitional champs. Ce sont des champs qui précèdent les équivalents de champs Open XML ultérieurs mais restent valides à l’intérieur .docx documents ouverts à partir de sources héritées. Chaque type de champ de transition possède sa propre classe fortement typée dérivée de Field, parallèlement au générique Field objet exposé par Document.Range.Fields.
Champs de code-barres
Trois classes de champs génèrent ou affichent des données de code-barres dans un document : FieldBarcode (le champ BARCODE — un code-barres postal hérité avec ses propres propriétés PostalAddress, IsBookmark, FacingIdentificationMark et IsUSPostalAddress), FieldDisplayBarcode (le champ DISPLAYBARCODE), et FieldMergeBarcode (le champ MERGEBARCODE, qui implémente également IMergeFieldSurrogate pour une utilisation lors de la fusion de courrier). FieldDisplayBarcode et FieldMergeBarcode partagent les mêmes propriétés de configuration de code-barres à usage général — BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar et FixCheckDigit — propriétés que FieldBarcode ne possède pas.
La classe BarcodeParameters est un conteneur pass-through exposant l’union des deux ensembles de propriétés (les propriétés d’adresse postale et les propriétés de configuration de code-barres générales), utilisé pour transmettre les paramètres à un rendu de code-barres, et IBarcodeGenerator est l’interface qu’un rendu personnalisé implémente, exposant GetBarcodeImage(parameters) et le GetOldBarcodeImage(parameters) hérité. Parcourez Document.Range.Fields et vérifiez Field.Type par rapport à FieldType.FieldBarcode, FieldType.FieldDisplayBarcode ou FieldType.FieldMergeBarcode pour localiser ces champs, puis effectuez un cast vers la classe de champ spécifique — BarcodeValue et BarcodeType ne sont disponibles qu’après un cast vers FieldDisplayBarcode ou FieldMergeBarcode, pas FieldBarcode.
Champs de compatibilité hérités
Quatre classes de champs supplémentaires couvrent les anciens codes de champ Word qui sont moins courants dans les documents nouvellement créés mais apparaissent toujours dans les fichiers .docx hérités : FieldBidiOutline (le champ BIDIOUTLINE, pour la numérotation d’outline de droite à gauche), FieldEQ (le champ d’équation EQ, qui expose également AsOfficeMath() pour convertir son contenu en un objet OfficeMath), FieldFootnoteRef (le champ FOOTNOTEREF, qui renvoie à une marque de note de bas de page ou de fin), et FieldInfo (le champ INFO, qui lit ou écrit une propriété d’information de résumé de document via ses propriétés InfoType et NewValue).
Chacune de ces classes de champs hérite de la même surface Field : GetFieldCode() renvoie le texte du code sous-jacent du champ, Update() réévalue le résultat du champ, Unlink() remplace le champ par son dernier résultat calculé, et Remove() supprime le champ du document. IFieldCodeTokenInfoProvider est implémenté par FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode et FieldInfo, puisque leurs codes de champ contiennent des commutateurs structurés au-delà d’une simple chaîne d’instruction.
Conseils et meilleures pratiques
- Vérifiez toujours
Field.Typeavant de convertir unFieldgénérique en l’une des classes de champs transitoires — un cast incorrect lève uneInvalidCastException. - Appelez
Update()après avoir modifié les propriétés d’un champ de code-barres afin queResultreflète la nouvelle configuration avant que le document ne soit enregistré. FieldEQ.AsOfficeMath()ne réussit que lorsque le champ EQ encode réellement une équation; vérifiez que leResultdu champ ressemble à une formule avant de l’appeler.- Utilisez
Unlink()lorsque vous souhaitez figer la valeur actuelle d’un champ en texte statique, en abandonnant la possibilité de le recalculer ultérieurement. - Les classes de champs de code-barres ne transportent que des données — cette édition FOSS n’inclut pas le moteur de rendu de code-barres, ainsi la sortie de
GetBarcodeImage()dépend de l’implémentationIBarcodeGeneratorque vous fournissez.
Problèmes courants
| Problème | Cause | Corriger |
|---|---|---|
InvalidCastException lors du transtypage d’un Field | Mauvais FieldType supposé | Vérifiez Field.Type par rapport à la constante correspondante FieldType d’abord |
FieldEQ.AsOfficeMath() renvoie des résultats inattendus | Le champ ne contient pas d’instruction d’équation valide | Inspectez la sortie de GetFieldCode() avant la conversion |
| Le champ code-barres n’a pas d’image rendue | Aucune implémentation de IBarcodeGenerator fournie | Fournissez un générateur personnalisé qui implémente GetBarcodeImage() |
Valeur de FieldInfo non mise à jour après le changement de NewValue | Champ non rafraîchi | Appelez Update() sur le champ après avoir modifié NewValue |
FAQ
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 (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.
Cette édition génère-t-elle des images de codes-barres?
Non. FieldBarcode, FieldDisplayBarcode et FieldMergeBarcode contiennent des données de code-barres et exposent l’interface IBarcodeGenerator, mais aucun moteur de rendu de code-barres intégré n’est fourni dans cette édition — vous devez fournir votre propre implémentation IBarcodeGenerator.
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 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).
API Reference Résumé
| Classe / Méthode | Description |
|---|---|
FieldBarcode | Implémente le champ BARCODE |
FieldDisplayBarcode | Implémente le champ DISPLAYBARCODE |
FieldMergeBarcode | Implémente le champ code-barres de publipostage MERGEBARCODE |
BarcodeParameters | Conteneur pour les paramètres du code-barres transmis à un générateur |
IBarcodeGenerator | Interface pour un rendu d’image de code-barres personnalisé |
FieldBidiOutline | Implémente le champ BIDIOUTLINE |
FieldEQ | Implémente le champ d’équation EQ ; AsOfficeMath() se convertit en OfficeMath |
FieldFootnoteRef | Implémente le champ FOOTNOTEREF |
FieldInfo | Implémente le champ de propriété de document INFO |