Övergångsfält
Övergångsfält
Den här guiden visar hur man arbetar med övergångsfälttyper — äldre streckkod- och kompatibilitetsfält — i Aspose.Words FOSS för .NET.
Aspose.Words FOSS för .NET representerar vissa äldre Word-fälttyper genom en dedikerad uppsättning klasser i Aspose.Words.Fields namnutrymmet, informellt kallat transitional fält. Dessa är fält som föregick senare Open XML fält motsvarigheter men förblir giltiga inom .docx dokument som öppnas från äldre källor. Varje övergångsfälttyp har sin egen starkt typade klass som ärver från Field, tillsammans med den generiska Field objektet som exponeras av Document.Range.Fields.
Streckkodfält
Tre fältklasser genererar eller visar streckkodsdata i ett dokument: FieldBarcode (fältet BARCODE — en äldre poststreckkod med sina egna PostalAddress, IsBookmark, FacingIdentificationMark och IsUSPostalAddress egenskaper), FieldDisplayBarcode (fältet DISPLAYBARCODE), och FieldMergeBarcode (fältet MERGEBARCODE, som också implementerar IMergeFieldSurrogate för användning vid kopplad utskrift). FieldDisplayBarcode och FieldMergeBarcode delar samma allmänna streckkodskonfigurationsegenskaper — BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar och FixCheckDigit — egenskaper som FieldBarcode inte har.
Klassen BarcodeParameters är en genomströmmande behållare som exponerar föreningen av båda egenskapsuppsättningarna (postadress-egenskaperna och de allmänna streckkodskonfigurations-egenskaperna), används för att överföra inställningar till en streckkodsgenererare, och IBarcodeGenerator är det gränssnitt som en anpassad renderare implementerar, exponerar GetBarcodeImage(parameters) och den äldre GetOldBarcodeImage(parameters). Iterera Document.Range.Fields och kontrollera Field.Type mot FieldType.FieldBarcode, FieldType.FieldDisplayBarcode eller FieldType.FieldMergeBarcode för att hitta dessa fält, kasta sedan till den specifika fältklassen — BarcodeValue och BarcodeType är endast tillgängliga efter casting till FieldDisplayBarcode eller FieldMergeBarcode, inte FieldBarcode.
Äldre kompatibilitetsfält
Fyra ytterligare fältklasser täcker äldre Word-fältkoder som är mindre vanliga i nyproducerade dokument men som fortfarande förekommer i äldre .docx-filer: FieldBidiOutline (fältet BIDIOUTLINE, för höger-till-vänster dispositionsnumrering), FieldEQ (fältet EQ ekvation, som också exponerar AsOfficeMath() för att konvertera dess innehåll till ett OfficeMath-objekt), FieldFootnoteRef (fältet FOOTNOTEREF, som korsrefererar en fotnot- eller slutnot-markör), och FieldInfo (fältet INFO, som läser eller skriver en dokument-sammanfattnings-informations-egenskap via dess InfoType och NewValue egenskaper).
Var och en av dessa fältklasser ärver samma Field gränssnitt: GetFieldCode() returnerar fältets underliggande kodtext, Update() utvärderar fältets resultat på nytt, Unlink() ersätter fältet med dess senast beräknade resultat, och Remove() tar bort fältet från dokumentet. IFieldCodeTokenInfoProvider implementeras av FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode och FieldInfo, eftersom deras fältkoder innehåller strukturerade växlar utöver en enkel instruktionssträng.
Tips och bästa praxis
- Kontrollera alltid
Field.Typeinnan du kastar ett generisktFieldtill någon av de övergångsfältklasserna — ett felaktigt kast kastar ettInvalidCastException. - Anropa
Update()efter att ha ändrat ett streckkodsfälts egenskaper så attResultåterspeglar den nya konfigurationen innan dokumentet sparas. FieldEQ.AsOfficeMath()lyckas endast när EQ-fältet faktiskt kodar en ekvation; verifiera att fältetsResultser ut som en formel innan du anropar det.- Använd
Unlink()när du vill frysa ett fälts aktuella värde som statisk text, och därmed förlora möjligheten att beräkna om det senare. - Streckkodsfältklasser bär endast data — den här FOSS-utgåvan inkluderar inte streckkodsrenderingsmotorn, så
GetBarcodeImage()-utdata beror på denIBarcodeGenerator-implementation du tillhandahåller.
Vanliga problem
| Issue | Cause | Fixa |
|---|---|---|
InvalidCastException vid kastning av en Field | Fel FieldType antagen | Kontrollera Field.Type mot den matchande FieldType-konstanten först |
FieldEQ.AsOfficeMath() ger oväntade resultat | Fältet innehåller inte en giltig ekvationsinstruktion | Inspektera GetFieldCode()-utdata innan konvertering |
| Streckkodsfältet har ingen renderad bild | Ingen IBarcodeGenerator-implementation tillhandahållen | Tillhandahåll en anpassad generator som implementerar GetBarcodeImage() |
FieldInfo värde uppdateras inte efter NewValue-ändring | Fältet har inte uppdaterats | Anropa Update() på fältet efter att ha ändrat NewValue |
FAQ
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 (streckkod och kompatibilitetsfält före Open-XML) via sina egna starkt typade klasser snarare än att bara hanteras genom det generiska Field-objektet.
Renderar den här utgåvan streckkodsbilder?
Nej. FieldBarcode, FieldDisplayBarcode och FieldMergeBarcode lagrar streckkodsdata och exponerar IBarcodeGenerator-gränssnittet, men ingen inbyggd streckkodsrenderingsmotor levereras i den här utgåvan — du tillhandahåller din egen IBarcodeGenerator-implementation.
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 med de relevanta FieldType-konstanterna (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).
API Reference Sammanfattning
| Klass / Metod | Beskrivning |
|---|---|
FieldBarcode | Implementerar BARCODE-fältet |
FieldDisplayBarcode | Implementerar DISPLAYBARCODE-fältet |
FieldMergeBarcode | Implementerar MERGEBARCODE mail-merge streckkodsfältet |
BarcodeParameters | Behållare för streckkodinställningar som skickas till en generator |
IBarcodeGenerator | Gränssnitt för en anpassad streckkodsbilderenderare |
FieldBidiOutline | Implementerar fältet BIDIOUTLINE |
FieldEQ | Implementerar EQ ekvationsfältet; AsOfficeMath() konverterar till OfficeMath |
FieldFootnoteRef | Implementerar fältet FOOTNOTEREF |
FieldInfo | Implementerar INFO dokumentegenskapsfält |