Hur man arbetar med övergångsfält i .NET

Hur man arbetar med övergångsfält i .NET

Hur man arbetar med övergångsfält i .NET

Aspose.Words FOSS för .NET representerar en grupp av äldre Word-fälttyper — streckkodsfält och ett fåtal pre-Open-XML kompatibilitetsfält — via dedikerade klasser i Aspose.Words.Fields namnutrymmet, informellt kallat transitional fält här. Denna guide visar hur man hittar, läser och konfigurerar dem. Varje övergångsfältklass härstammar från bas Field typen, tillsammans med den generiska Field objektet som exponeras av Document.Range.Fields.


Steg-för-steg-guide

Steg 1: Hitta övergångsfält i ett dokument

Iterera Document.Range.Fields och jämför varje fälts Type (ett FieldType-värde) med de relevanta konstanterna — FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef eller FieldInfo — för att sedan kasta det generiska Field till den matchande klassen för att komma åt dess specifika egenskaper. Kontrollera alltid Type innan du kastar: ett felaktigt kast till fel fältklass resulterar i ett InvalidCastException.


Steg 2: Konfigurera ett DISPLAYBARCODE- eller MERGEBARCODE-fält

FieldDisplayBarcode (fältet DISPLAYBARCODE) och FieldMergeBarcode (fältet MERGEBARCODE, som också implementerar IMergeFieldSurrogate för mail merge) delar samma uppsättning av barcode-konfigurationsegenskaper: BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar, och FixCheckDigit. Ställ in dessa på fältinstansen, anropa sedan Update() så att Result reflekterar den nya konfigurationen innan dokumentet sparas.


Steg 3: Läs Legacy BARCODE (Postal) Field Data

FieldBarcode implementerar det äldre BARCODE-fältet, som specifikt är ett US postal barcode (POSTNET)-fält snarare än ett allmänt barcode-fält — det delar inte BarcodeType/BarcodeValue-egenskaperna från Steg 2. Istället exponerar det PostalAddress (adressen som barcode kodar), FacingIdentificationMark, IsUSPostalAddress och IsBookmark. Kontrollera Field.Type mot FieldType.FieldBarcode specifikt innan du läser dessa egenskaper, eftersom en castning av ett DISPLAYBARCODE eller MERGEBARCODE-fält till FieldBarcode inte skulle exponera de egenskaper du förväntar dig.


Steg 4: Rendera Barcode-bilder med en anpassad generator

Denna FOSS-utgåva innehåller barcode-fältdata men inkluderar inte en barcode-renderingsmotor. BarcodeParameters är den pass-through-behållare som konsoliderar inställningar från antingen barcode-fältfamiljen — DISPLAYBARCODE/MERGEBARCODE-egenskaperna från Steg 2 och postegenskaperna från Steg 3 — till ett enda objekt som överlämnas till en renderer. Implementera IBarcodeGenerator, exponera GetBarcodeImage(parameters) och den legacy GetOldBarcodeImage(parameters), för att tillhandahålla den faktiska bildrenderingen; utan en tillhandahållen implementation innehåller barcode-fält endast konfigurationsdata.


Steg 5: Arbeta med Legacy Compatibility-fält

Fyra andra klasser täcker äldre fältkoder som fortfarande finns i legacy .docx-filer. FieldBidiOutline implementerar BIDIOUTLINE-fältet för höger-till-vänster outline-numrering och exponerar inga egenskaper utöver den gemensamma Field-ytan. FieldEQ implementerar EQ-ekvationsfältet och exponerar dessutom AsOfficeMath() för att konvertera dess innehåll till ett OfficeMath-objekt — detta lyckas endast när fältet faktiskt kodar en ekvation. FieldFootnoteRef implementerar FOOTNOTEREF-fältet, som korsrefererar ett fotnot- eller slutnot-märke, och exponerar också inga egenskaper utöver den gemensamma Field-ytan. FieldInfo implementerar INFO-fältet, läser eller skriver en dokument-sammanfattnings-informations-egenskap via dess InfoType och NewValue egenskaper.


Steg 6: Uppdatera eller frysa värdet på ett Transitional Field

Varje övergångsfältklass ärver GetFieldCode() (fältets underliggande kodtext), Update() (omvärderar resultatet), Unlink() (ersätter fältet med dess senast beräknade resultat som statisk text) och Remove() (tar bort fältet). Anropa Update() efter att du har ändrat någon fälts konfiguration så att Result återspeglar förändringen, och använd Unlink() när ett fälts nuvarande värde ska frysas snarare än att förbli omberäkningsbart.


Vanliga problem och lösningar

InvalidCastException vid typomvandling av en Field till en övergångsfältklass. Det fel FieldType antogs. Kontrollera Field.Type mot den matchande FieldType konstant innan casting.

A DISPLAYBARCODE/MERGEBARCODE fältets egenskaper saknas efter casting. Fältet kastades till FieldBarcode istället för FieldDisplayBarcode/FieldMergeBarcode (eller omvänt) — dessa klasser exponerar olika egenskapsuppsättningar även om alla tre representerar streckkoddata. Bekräfta Field.Type innan kastning.

Streckkodfält bär data men ingen bild renderas. Nej IBarcodeGenerator implementering tillhandahölls. Tillhandahåll en anpassad generator som implementerar GetBarcodeImage(parameters) — den här utgåvan levereras inte med en inbyggd streckkodsrenderingsmotor.

FieldEQ.AsOfficeMath() returnerar oväntade resultat. Fältet innehåller inte en giltig ekvationsinstruktion. Undersök fältets GetFieldCode() utdata innan du försöker med konverteringen.

FieldInfo’s värde uppdateras inte efter inställning NewValue. Fältet uppdaterades inte efter ändringen. Anropa Update() på fältet efter modifiering NewValue.


Vanliga frågor

Vad betyder “transitional” för dessa fälttyper?

Det är inte officiell Word-terminologi — den grupperar fältklasser i den här utgåvans Aspose.Words.Fields-namnrymd som implementerar äldre fältkoder (streckkodsfält och kompatibilitetsfält före Open-XML) via sina egna starkt typade klasser snarare än att bara hanteras genom det generiska Field-objektet.

Använder FieldBarcode samma egenskaper som FieldDisplayBarcode?

Nej. FieldBarcode implementerar det äldre BARCODE (postal/POSTNET)-fältet och exponerar PostalAddress, FacingIdentificationMark, IsUSPostalAddress och IsBookmark. FieldDisplayBarcode och FieldMergeBarcode har en annan uppsättning egenskaper — BarcodeType, BarcodeValue, SymbolHeight och relaterade renderingsinställningar.

Renderar den här utgåvan streckkodsbilder?

Nej. FieldBarcode, FieldDisplayBarcode och FieldMergeBarcode innehåller streckkodskonfigurationsdata och exponerar IBarcodeGenerator-gränssnittet, men ingen streckkodsrenderingsmotor medföljer i den här utgåvan — en anpassad IBarcodeGenerator-implementation krävs för att producera en bild.

Kan jag konvertera ett EQ-fält till en OfficeMath-ekvation?

Ja, via FieldEQ.AsOfficeMath(), förutsatt att fältets kod faktiskt kodar en ekvation.

Hur hittar jag alla övergångsfält i ett dokument?

Enumerera Document.Range.Fields och jämför varje Field.Type mot de relevanta FieldType-konstanterna (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).


Se även

 Svenska