Übergangsfelder
Übergangsfelder
Dieser Leitfaden zeigt, wie man mit Übergangsfeldtypen — Legacy-Barcode- und Kompatibilitätsfeldern — in Aspose.Words FOSS für .NET arbeitet.
Aspose.Words FOSS für .NET repräsentiert bestimmte ältere Word-Feldtypen durch einen dedizierten Satz von Klassen im Aspose.Words.Fields Namensraum, informell genannt transitional Felder. Dies sind Felder, die den späteren Open XML-Feldäquivalenten vorausgehen, aber innerhalb von .docx Dokumenten, die aus Legacy-Quellen geöffnet wurden. Jeder Übergangs-Feldtyp hat seine eigene stark typisierte Klasse, die abgeleitet ist von Field, neben dem generischen Field Objekt, das bereitgestellt wird von Document.Range.Fields.
Barcode-Felder
Drei Feldklassen erzeugen oder zeigen Barcode-Daten innerhalb eines Dokuments an: FieldBarcode (das BARCODE-Feld — ein Legacy-Post-Barcode mit eigenen PostalAddress, IsBookmark, FacingIdentificationMark und IsUSPostalAddress Eigenschaften), FieldDisplayBarcode (das DISPLAYBARCODE-Feld) und FieldMergeBarcode (das MERGEBARCODE-Feld, das außerdem IMergeFieldSurrogate für die Verwendung beim Seriendruck implementiert). FieldDisplayBarcode und FieldMergeBarcode teilen dieselben universellen Barcode-Konfigurationseigenschaften — BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar und FixCheckDigit — Eigenschaften, die FieldBarcode nicht hat.
Die BarcodeParameters-Klasse ist ein Durchlauf-Container, der die Vereinigung beider Eigenschaftensätze (die Postadress-Eigenschaften und die allgemeinen Barcode-Konfigurationseigenschaften) offenlegt, um Einstellungen an einen Barcode-Renderer zu übergeben, und IBarcodeGenerator ist die Schnittstelle, die ein benutzerdefinierter Renderer implementiert und GetBarcodeImage(parameters) sowie das Legacy-GetOldBarcodeImage(parameters) bereitstellt. Durchlaufen Sie Document.Range.Fields und prüfen Sie Field.Type gegenüber FieldType.FieldBarcode, FieldType.FieldDisplayBarcode oder FieldType.FieldMergeBarcode, um diese Felder zu finden, dann casten Sie zur spezifischen Feldklasse — BarcodeValue und BarcodeType sind nur nach dem Casten zu FieldDisplayBarcode bzw. FieldMergeBarcode verfügbar, nicht zu FieldBarcode.
Legacy-Kompatibilitätsfelder
Vier zusätzliche Feldklassen decken ältere Word-Feldcodes ab, die in neu erstellten Dokumenten weniger verbreitet sind, aber dennoch in Legacy-.docx-Dateien vorkommen: FieldBidiOutline (das BIDIOUTLINE-Feld für rechts-nach-links-Gliederungsnummerierung), FieldEQ (das EQ-Gleichungsfeld, das außerdem AsOfficeMath() bereitstellt, um dessen Inhalt in ein OfficeMath-Objekt zu konvertieren), FieldFootnoteRef (das FOOTNOTEREF-Feld, das eine Fuß- oder Endnotenmarkierung referenziert), und FieldInfo (das INFO-Feld, das eine Dokumenten-Zusammenfassungs-Informations-Eigenschaft über seine InfoType- und NewValue-Eigenschaften liest oder schreibt).
Jede dieser Feldklassen erbt dieselbe Field-Oberfläche: GetFieldCode() gibt den zugrunde liegenden Code-Text des Feldes zurück, Update() wertet das Ergebnis des Feldes neu aus, Unlink() ersetzt das Feld durch sein zuletzt berechnetes Ergebnis, und Remove() löscht das Feld aus dem Dokument. IFieldCodeTokenInfoProvider wird von FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode und FieldInfo implementiert, da deren Feldcodes strukturierte Schalter über einen einfachen Anweisungsstring hinaus enthalten.
Tipps und bewährte Vorgehensweisen
- Überprüfen Sie stets
Field.Type, bevor Sie ein generischesFieldzu einer der Übergangs-Feldklassen casten — ein falscher Cast wirft einInvalidCastException. - Rufen Sie
Update()auf, nachdem Sie die Eigenschaften eines Barcode-Feldes geändert haben, damitResultdie neue Konfiguration widerspiegelt, bevor das Dokument gespeichert wird. FieldEQ.AsOfficeMath()gelingt nur, wenn das EQ-Feld tatsächlich eine Gleichung codiert; überprüfen Sie, ob dasResultdes Feldes wie eine Formel aussieht, bevor Sie es aufrufen.- Verwenden Sie
Unlink(), wenn Sie den aktuellen Wert eines Feldes als statischen Text festschreiben möchten, wobei die Möglichkeit, es später neu zu berechnen, verworfen wird. - Barcode-Feldklassen enthalten nur Daten — diese FOSS-Edition beinhaltet nicht die Barcode-Rendering-Engine, sodass die
GetBarcodeImage()-Ausgabe von der von Ihnen bereitgestelltenIBarcodeGenerator-Implementierung abhängt.
Häufige Probleme
| Problem | Ursache | Beheben |
|---|---|---|
InvalidCastException beim Casting eines Field | Falsches FieldType angenommen | Überprüfen Sie Field.Type zuerst gegen die passende FieldType-Konstante |
FieldEQ.AsOfficeMath() liefert unerwartete Ergebnisse | Feld enthält keine gültige Gleichungsanweisung | Untersuchen Sie die Ausgabe von GetFieldCode() vor der Konvertierung |
| Barcode-Feld hat kein gerendertes Bild | Keine IBarcodeGenerator-Implementierung angegeben | Stellen Sie einen benutzerdefinierten Generator bereit, der GetBarcodeImage() implementiert |
FieldInfo-Wert nach Änderung von NewValue nicht aktualisiert | Feld nicht aktualisiert | Rufen Sie Update() für das Feld auf, nachdem Sie NewValue geändert haben |
FAQ
Was bedeutet „transitional“ für diese Feldtypen?
Es ist keine offizielle Word-Terminologie — sie gruppiert Feldklassen im Aspose.Words.Fields-Namespace dieser Ausgabe, die ältere Feldcodes (Barcode- und vor-Open-XML-Kompatibilitätsfelder) über ihre eigenen stark typisierten Klassen implementieren, anstatt nur über das generische Field-Objekt verarbeitet zu werden.
Rendert diese Ausgabe Barcode-Bilder?
Nein. FieldBarcode, FieldDisplayBarcode und FieldMergeBarcode enthalten Barcode-Daten und stellen die IBarcodeGenerator-Schnittstelle bereit, aber es wird keine integrierte Barcode-Rendering-Engine in dieser Ausgabe mitgeliefert – Sie stellen Ihre eigene IBarcodeGenerator-Implementierung bereit.
Kann ich ein EQ-Feld in eine OfficeMath-Gleichung umwandeln?
Ja, über FieldEQ.AsOfficeMath(), vorausgesetzt, der Feldcode codiert tatsächlich eine Gleichung.
Wie finde ich alle Übergangsfelder in einem Dokument?
Zähle Document.Range.Fields auf und vergleiche jedes Field.Type mit den entsprechenden FieldType-Konstanten (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).
API Reference Zusammenfassung
| Klasse / Methode | Beschreibung |
|---|---|
FieldBarcode | Implementiert das BARCODE-Feld |
FieldDisplayBarcode | Implementiert das DISPLAYBARCODE-Feld |
FieldMergeBarcode | Implementiert das MERGEBARCODE-Mail-Merge-Barcode-Feld |
BarcodeParameters | Container für Barcode-Einstellungen, die an einen Generator übergeben werden |
IBarcodeGenerator | Schnittstelle für einen benutzerdefinierten Barcode-Bildrenderer |
FieldBidiOutline | Implementiert das BIDIOUTLINE-Feld |
FieldEQ | Implementiert das EQ-Gleichungsfeld; AsOfficeMath() konvertiert zu OfficeMath |
FieldFootnoteRef | Implementiert das FOOTNOTEREF-Feld |
FieldInfo | Implementiert das INFO-Dokument-Eigenschaftsfeld |