Wie man mit Übergangsfeldern in .NET arbeitet
Wie man mit Übergangsfeldern in .NET arbeitet
Aspose.Words FOSS für .NET stellt eine Gruppe älterer Word-Feldtypen dar — Barcode-Felder und eine Handvoll vor-Open-XML-Kompatibilitätsfelder — über dedizierte Klassen im Aspose.Words.Fields Namensraum, informell genannt transitional Felder hier. Dieser Leitfaden zeigt, wie man sie findet, liest und konfiguriert. Jede Übergangs-Feldklasse erbt von der Basis Field Typ, zusammen mit dem generischen Field Objekt, das von Document.Range.Fields.
Schritt-für-Schritt-Anleitung
Schritt 1: Übergangsfelder in einem Dokument finden
Durchlaufen Sie Document.Range.Fields und vergleichen Sie den Type jedes Feldes (ein FieldType-Wert) mit den relevanten Konstanten — FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef oder FieldInfo — und casten Sie das generische Field in die passende Klasse, um auf deren spezifische Eigenschaften zuzugreifen. Überprüfen Sie stets Type vor dem Casten: Ein Cast in die falsche Feldklasse löst einen InvalidCastException aus.
Schritt 2: Ein DISPLAYBARCODE- oder MERGEBARCODE-Feld konfigurieren
FieldDisplayBarcode (das DISPLAYBARCODE-Feld) und FieldMergeBarcode (das MERGEBARCODE-Feld, das zudem IMergeFieldSurrogate für Seriendruck implementiert) teilen denselben Satz von Barcode-Konfigurationseigenschaften: BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar und FixCheckDigit. Setzen Sie diese auf die Feldinstanz und rufen Sie dann Update() auf, damit Result die neue Konfiguration widerspiegelt, bevor das Dokument gespeichert wird.
Schritt 3: Legacy BARCODE (Postal) Felddaten lesen
FieldBarcode implementiert das ältere BARCODE-Feld, das speziell ein US-Post-Barcode (POSTNET)-Feld ist und kein allgemeiner Barcode – es teilt nicht die BarcodeType/BarcodeValue-Eigenschaften aus Schritt 2. Stattdessen stellt es PostalAddress (die Adresse, die der Barcode kodiert), FacingIdentificationMark, IsUSPostalAddress und IsBookmark bereit. Prüfen Sie Field.Type speziell gegen FieldType.FieldBarcode, bevor Sie diese Eigenschaften auslesen, da das Casten eines DISPLAYBARCODE- oder MERGEBARCODE-Feldes zu FieldBarcode die erwarteten Eigenschaften nicht sichtbar macht.
Schritt 4: Barcode-Bilder mit einem benutzerdefinierten Generator rendern
Diese FOSS-Edition enthält Barcode-Felddaten, enthält jedoch keine Barcode-Rendering-Engine. BarcodeParameters ist der Durchleitungs-Container, der Einstellungen aus beiden Barcode-Feldfamilien – die DISPLAYBARCODE/MERGEBARCODE-Eigenschaften aus Schritt 2 und die Post-Eigenschaften aus Schritt 3 – zu einem einzigen Objekt zusammenführt, das an einen Renderer übergeben wird. Implementieren Sie IBarcodeGenerator, wobei Sie GetBarcodeImage(parameters) und das Legacy-GetOldBarcodeImage(parameters) bereitstellen, um das eigentliche Bild-Rendering zu liefern; ohne eine bereitgestellte Implementierung enthalten Barcode-Felder nur Konfigurationsdaten.
Schritt 5: Mit Legacy-Kompatibilitätsfeldern arbeiten
Vier weitere Klassen decken ältere Feldcodes ab, die noch in Legacy-.docx-Dateien vorkommen. FieldBidiOutline implementiert das BIDIOUTLINE-Feld für rechts-nach-links Gliederungsnummerierung und stellt keine Eigenschaften über die gemeinsame Field-Oberfläche hinaus bereit. FieldEQ implementiert das EQ-Gleichungsfeld und stellt zusätzlich AsOfficeMath() bereit, um seinen Inhalt in ein OfficeMath-Objekt zu konvertieren – dies gelingt nur, wenn das Feld tatsächlich eine Gleichung kodiert. FieldFootnoteRef implementiert das FOOTNOTEREF-Feld, das ein Fuß- oder Endnotenzeichen referenziert, und stellt ebenfalls keine Eigenschaften über die gemeinsame Field-Oberfläche hinaus bereit. FieldInfo implementiert das INFO-Feld und liest bzw. schreibt eine Dokument-Zusammenfassungs-Informations-Eigenschaft über seine InfoType- und NewValue-Eigenschaften.
Schritt 6: Den Wert eines Übergangs-Feldes aktualisieren oder einfrieren
Jede Übergangs-Feldklasse erbt GetFieldCode() (der zugrunde liegende Code-Text des Feldes), Update() (wertet das Ergebnis erneut aus), Unlink() (ersetzt das Feld durch sein zuletzt berechnetes Ergebnis als statischen Text) und Remove() (löscht das Feld). Rufen Sie Update() auf, nachdem Sie die Konfiguration eines Feldes geändert haben, damit Result die Änderung widerspiegelt, und verwenden Sie Unlink(), wenn der aktuelle Wert eines Feldes eingefroren werden soll, anstatt erneut berechnet zu werden.
Häufige Probleme und Lösungen
InvalidCastException bei der Umwandlung eines Field zu einer Übergangs-Feldklasse. Das falsche FieldType wurde angenommen. Prüfen Field.Type gegen die Übereinstimmung FieldType Konstante vor dem Casting.
A DISPLAYBARCODE/MERGEBARCODE Feldeigenschaften fehlen nach dem Casting. Das Feld wurde gecastet zu FieldBarcode statt FieldDisplayBarcode/FieldMergeBarcode (oder umgekehrt) — diese Klassen stellen unterschiedliche Eigenschaftssätze bereit, obwohl alle drei Barcode-Daten repräsentieren. Bestätigen Field.Type vor dem Casting.
Barcode-Felder enthalten Daten, aber kein Bild wird gerendert. Nein IBarcodeGenerator Implementierung wurde bereitgestellt. Stellen Sie einen benutzerdefinierten Generator bereit, der implementiert GetBarcodeImage(parameters) — diese Edition liefert keine eingebaute Barcode-Rendering-Engine.
FieldEQ.AsOfficeMath() liefert unerwartete Ergebnisse. Das Feld enthält keine gültige Gleichungsanweisung. Untersuchen Sie das Feld GetFieldCode() Ausgabe, bevor Sie die Umwandlung versuchen.
FieldInfoDer Wert wird nach dem Setzen nicht aktualisiert NewValue. Das Feld wurde nach der Änderung nicht aktualisiert. Rufen Sie Update() am Feld nach dem Ändern NewValue.
Häufig gestellte Fragen
Was bedeutet „transitional“ für diese Feldtypen?
Es ist nicht die offizielle Word-Terminologie – sie gruppiert Feldklassen im Aspose.Words.Fields-Namensraum dieser Ausgabe, die ältere Feldcodes (Strichcode-Felder und Kompatibilitätsfelder vor Open-XML) durch ihre eigenen stark typisierten Klassen implementieren, anstatt nur über das generische Field-Objekt verarbeitet zu werden.
Verwendet FieldBarcode dieselben Eigenschaften wie FieldDisplayBarcode?
Nein. FieldBarcode implementiert das veraltete BARCODE (postal/POSTNET)-Feld und stellt PostalAddress, FacingIdentificationMark, IsUSPostalAddress und IsBookmark bereit. FieldDisplayBarcode und FieldMergeBarcode teilen einen anderen Eigenschaftensatz – BarcodeType, BarcodeValue, SymbolHeight und zugehörige Rendering-Einstellungen.
Erzeugt diese Ausgabe Barcode-Bilder?
Nein. FieldBarcode, FieldDisplayBarcode und FieldMergeBarcode enthalten Barcode-Konfigurationsdaten und stellen die IBarcodeGenerator-Schnittstelle bereit, aber in dieser Ausgabe ist keine Barcode-Rendering-Engine enthalten – eine benutzerdefinierte IBarcodeGenerator-Implementierung ist erforderlich, um ein Bild zu erzeugen.
Kann ich ein EQ-Feld in eine OfficeMath-Gleichung umwandeln?
Ja, über FieldEQ.AsOfficeMath(), vorausgesetzt, der Code des Feldes codiert tatsächlich eine Gleichung.
Wie finde ich alle Übergangsfelder in einem Dokument?
Durchlaufen Sie Document.Range.Fields und vergleichen Sie jedes Field.Type mit den entsprechenden FieldType-Konstanten (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).