Hoe te werken met overgangsvelden in .NET

Hoe te werken met overgangsvelden in .NET

Hoe te werken met overgangsvelden in .NET

Aspose.Words FOSS voor .NET vertegenwoordigt een groep oudere Word-veldtypen — barcode-velden en een handvol pre-Open-XML compatibiliteitsvelden — via toegewijde klassen in de Aspose.Words.Fields namespace, informeel genoemd transitional velden hier. Deze gids laat zien hoe je ze vindt, leest en configureert. Elke transitie-veldklasse is afgeleid van de basistype Field type, naast het generieke Field object dat wordt blootgesteld door Document.Range.Fields.


Stapsgewijze handleiding

Stap 1: Zoek overgangsvelden in een document

Enumerate Document.Range.Fields en vergelijk elke veld’s Type (een FieldType waarde) met de relevante constanten — FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef of FieldInfo — en cast vervolgens het generieke Field naar de overeenkomende klasse om toegang te krijgen tot zijn specifieke eigenschappen. Controleer altijd Type vóór het casten: casten naar de verkeerde veldklasse veroorzaakt een InvalidCastException.


Stap 2: Configureer een DISPLAYBARCODE- of MERGEBARCODE-veld

FieldDisplayBarcode (het DISPLAYBARCODE veld) en FieldMergeBarcode (het MERGEBARCODE veld, dat ook IMergeFieldSurrogate implementeert voor mail-merge) delen dezelfde set barcode-configuratie-eigenschappen: BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar en FixCheckDigit. Stel deze in op de veld-instantie en roep vervolgens Update() aan zodat Result de nieuwe configuratie weergeeft voordat het document wordt opgeslagen.


Stap 3: Legacy BARCODE (Postal) Veldgegevens Lezen

FieldBarcode implementeert het oudere BARCODE veld, dat specifiek een US-postal barcode (POSTNET) veld is in plaats van een algemene barcode — het deelt de BarcodeType/BarcodeValue eigenschappen uit Stap 2 niet. In plaats daarvan maakt het PostalAddress (het adres dat de barcode codeert), FacingIdentificationMark, IsUSPostalAddress en IsBookmark beschikbaar. Controleer Field.Type specifiek tegen FieldType.FieldBarcode voordat u deze eigenschappen leest, aangezien het casten van een DISPLAYBARCODE of MERGEBARCODE veld naar FieldBarcode de verwachte eigenschappen niet zou blootstellen.


Stap 4: Barcode-afbeeldingen Renderen met een Aangepaste Generator

Deze FOSS-editie bevat barcode-veldgegevens maar bevat geen barcode-renderingengine. BarcodeParameters is de doorgeefcontainer die instellingen van beide barcode-veldfamilies — de DISPLAYBARCODE/MERGEBARCODE eigenschappen uit Stap 2 en de post-eigenschappen uit Stap 3 — consolideert tot één object dat aan een renderer wordt doorgegeven. Implementeer IBarcodeGenerator, waarbij GetBarcodeImage(parameters) en de legacy GetOldBarcodeImage(parameters) worden blootgesteld, om de daadwerkelijke afbeeldingsrendering te leveren; zonder een geleverde implementatie bevatten barcode-velden alleen configuratie-gegevens.


Stap 5: Werken met Legacy Compatibiliteitsvelden

Vier andere klassen behandelen oudere veldcodes die nog steeds voorkomen in legacy .docx bestanden. FieldBidiOutline implementeert het BIDIOUTLINE veld voor rechts-naar-links outline-nummering en maakt geen eigenschappen bloot buiten het gemeenschappelijke Field oppervlak. FieldEQ implementeert het EQ vergelijkingveld en maakt bovendien AsOfficeMath() beschikbaar om de inhoud om te zetten naar een OfficeMath object — dit slaagt alleen wanneer het veld daadwerkelijk een vergelijking codeert. FieldFootnoteRef implementeert het FOOTNOTEREF veld, dat een voetnoot- of eindnoot-markering kruist, en maakt ook geen eigenschappen bloot buiten het gemeenschappelijke Field oppervlak. FieldInfo implementeert het INFO veld, dat een document-samenvattings-informatie-eigenschap leest of schrijft via zijn InfoType en NewValue eigenschappen.


Stap 6: De waarde van een Transitional-veld bijwerken of bevriezen

Elke transitie-veldklasse erft GetFieldCode() (de onderliggende code-tekst van het veld), Update() (herberekent het resultaat), Unlink() (vervangt het veld door zijn laatst berekende resultaat als statische tekst), en Remove() (verwijdert het veld). Roep Update() aan na het wijzigen van de configuratie van een veld zodat Result de wijziging weerspiegelt, en gebruik Unlink() wanneer de huidige waarde van een veld bevroren moet worden in plaats van opnieuw berekenbaar te blijven.


Veelvoorkomende problemen en oplossingen

InvalidCastException bij het casten van een Field naar een transitie-veldklasse. De verkeerde FieldType werd verondersteld. Controleer Field.Type tegen de overeenkomst FieldType constante vóór het casten.

A DISPLAYBARCODE/MERGEBARCODE eigenschappen van het veld ontbreken na het casten. Het veld werd gecast naar FieldBarcode in plaats van FieldDisplayBarcode/FieldMergeBarcode (of omgekeerd) — deze klassen bieden verschillende eigenschapsets, hoewel alle drie barcode-gegevens vertegenwoordigen. Bevestig Field.Type voor het casten.

Barcode-velden bevatten gegevens, maar er wordt geen afbeelding weergegeven. Nee IBarcodeGenerator implementatie werd geleverd. Lever een aangepaste generator die implementeert GetBarcodeImage(parameters) — deze editie levert geen ingebouwde barcode-renderengine.

FieldEQ.AsOfficeMath() geeft onverwachte resultaten terug. Het veld bevat geen geldige vergelijkinginstructie. Inspecteer het veld GetFieldCode() output voordat je de conversie probeert.

FieldInfo’s waarde wordt niet bijgewerkt na het instellen NewValue. Het veld werd niet ververst na de wijziging. Roep Update() op het veld na het wijzigen NewValue.


Veelgestelde vragen

Wat betekent “transitional” voor deze veldtypen?

Het is geen officiële Word-terminologie — het groepeert veldklassen in de Aspose.Words.Fields namespace van deze editie die oudere veldcodes (barcode-velden en pre-Open-XML compatibiliteitsvelden) implementeren via hun eigen sterk getypeerde klassen in plaats van alleen via het generieke Field object.

Gebruikt FieldBarcode dezelfde eigenschappen als FieldDisplayBarcode?

Nee. FieldBarcode implementeert het legacy BARCODE (postal/POSTNET) veld en stelt PostalAddress, FacingIdentificationMark, IsUSPostalAddress en IsBookmark beschikbaar. FieldDisplayBarcode en FieldMergeBarcode delen een andere set eigenschappen — BarcodeType, BarcodeValue, SymbolHeight en gerelateerde renderinstellingen.

Rendert deze editie barcode-afbeeldingen?

Nee. FieldBarcode, FieldDisplayBarcode en FieldMergeBarcode bevatten barcode-configuratiegegevens en stellen de IBarcodeGenerator interface beschikbaar, maar er wordt geen barcode-renderingengine meegeleverd in deze editie — een aangepaste IBarcodeGenerator implementatie is vereist om een afbeelding te produceren.

Kan ik een EQ-veld omzetten naar een OfficeMath vergelijking?

Ja, via FieldEQ.AsOfficeMath(), mits de code van het veld daadwerkelijk een vergelijking codeert.

Hoe vind ik alle transitiële velden in een document?

Doorloop Document.Range.Fields en vergelijk elke Field.Type met de relevante FieldType-constanten (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).


Zie ook

 Nederlands