Hogyan dolgozzunk átmeneti mezőkkel a .NET-ban
Hogyan dolgozzunk átmeneti mezőkkel a .NET rendszerben
Aspose.Words FOSS for .NET egy csoportot képvisel a régebbi Word mezőtípusokból — vonalkód mezők és néhány pre-Open-XML kompatibilitási mező — dedikált osztályokon keresztül a Aspose.Words.Fields névtérben, informálisan nevezve transitional mezőket itt. Ez az útmutató bemutatja, hogyan találjuk meg, olvassuk és konfiguráljuk őket. Minden átmeneti mezőosztály a bázis Field típusból, a generikus Field objektumot, amelyet a Document.Range.Fields.
Lépésről lépésre útmutató
1. lépés: Átmeneti mezők keresése egy dokumentumban
Iteráljuk a Document.Range.Fields elemeket, és hasonlítsuk össze minden mező Type értékét (egy FieldType érték) a megfelelő állandókkal — FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef vagy FieldInfo — majd a generikus Field objektumot castoljuk a megfelelő osztályra a specifikus tulajdonságok eléréséhez. Mindig ellenőrizzük a Type értéket a castolás előtt: a rossz mezőosztályra történő castolás InvalidCastException hibát eredményez.
2. lépés: DISPLAYBARCODE vagy MERGEBARCODE mező konfigurálása
FieldDisplayBarcode (a DISPLAYBARCODE mező) és FieldMergeBarcode (a MERGEBARCODE mező, amely emellett IMergeFieldSurrogate-t valósít meg a levélösszefűzéshez) ugyanazt a sorozatot osztják meg a vonalkód-konfigurációs tulajdonságokból: BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar és FixCheckDigit. Állítsd be ezeket a mezőpéldányon, majd hívd meg a Update() metódust, hogy a Result tükrözze az új konfigurációt a dokumentum mentése előtt.
3. lépés: Régi BARCODE (Postai) mezőadatok olvasása
FieldBarcode megvalósítja a régebbi BARCODE mezőt, ami kifejezetten egy US postai vonalkód (POSTNET) mező, nem pedig egy általános célú vonalkód — nem osztja meg a BarcodeType/BarcodeValue tulajdonságokat a 2. lépésből. Ehelyett PostalAddress-t (a vonalkód által kódolt címet), FacingIdentificationMark, IsUSPostalAddress és IsBookmark tesz elérhetővé. Ellenőrizd a Field.Type-t a FieldType.FieldBarcode-val kifejezetten, mielőtt ezeket a tulajdonságokat olvasnád, mivel egy DISPLAYBARCODE vagy MERGEBARCODE mező FieldBarcode-ra való átkonvertálása nem teszi elérhetővé a várt tulajdonságokat.
4. lépés: Vonalkód képek renderelése egy egyedi generátorral
Ez a FOSS kiadás tartalmazza a vonalkód mező adatokat, de nem tartalmaz vonalkód renderelő motorral. BarcodeParameters egy áteresztő konténer, amely egyesíti a beállításokat a vonalkód-mező család bármelyik részéről — a 2. lépésből származó DISPLAYBARCODE/MERGEBARCODE tulajdonságokat és a 3. lépésből származó postai tulajdonságokat — egyetlen objektumba, amelyet a renderelőnek adunk át. Valósítsd meg a IBarcodeGenerator interfészt, amely GetBarcodeImage(parameters)-t és a régi GetOldBarcodeImage(parameters)-t teszi elérhetővé, hogy biztosítsa a tényleges képrenderelést; ha nincs megadott implementáció, a vonalkód mezők csak konfigurációs adatokat hordoznak.
5. lépés: Munkavégzés a régi kompatibilitási mezőkkel
Négy további osztály lefedi a régebbi mezőkódokat, amelyek még mindig megtalálhatók a legacy .docx fájlokban. FieldBidiOutline megvalósítja a BIDIOUTLINE mezőt a jobbról balra történő vázlat számozáshoz, és nem tesz elérhetővé semmilyen tulajdonságot a közös Field felületén túl. FieldEQ megvalósítja a EQ egyenletmezőt, és továbbá AsOfficeMath()-t tesz elérhetővé, hogy a tartalmát OfficeMath objektummá konvertálja — ez csak akkor sikerül, ha a mező valóban egy egyenletet kódol. FieldFootnoteRef megvalósítja a FOOTNOTEREF mezőt, amely kereszt-referál egy lábjegyzet vagy végjegyzet jelölőre, és szintén nem tesz elérhetővé semmilyen tulajdonságot a közös Field felületén túl. FieldInfo megvalósítja a INFO mezőt, amely a dokumentum összegző-információs tulajdonságot olvassa vagy írja a InfoType és NewValue tulajdonságain keresztül.
6. lépés: Átmeneti mező értékének frissítése vagy befagyasztása
Minden átmeneti mezőosztály örökli a GetFieldCode() (a mező alapul szolgáló kódszöveg), a Update() (újraszámolja az eredményt), a Unlink() (lecseréli a mezőt az utolsó kiszámított eredményre statikus szövegként), és a Remove() (törli a mezőt). Hívja a Update()-t a mező bármely konfigurációjának módosítása után, hogy a Result tükrözze a változást, és használja a Unlink()-t, amikor egy mező jelenlegi értékét le kell fagyasztani, ahelyett, hogy újraszámolható maradna.
Általános problémák és megoldások
InvalidCastException körbevetésekor egy Field átmeneti mezőosztályra. A rossz FieldType feltételezték. Ellenőrizze Field.Type az egyezővel szemben FieldType állandó az átalakítás előtt.
A DISPLAYBARCODE/MERGEBARCODE a mező tulajdonságai hiányoznak az átalakítás után. A mező átalakítva lett FieldBarcode helyett FieldDisplayBarcode/FieldMergeBarcode (vagy fordítva) — ezek az osztályok különböző tulajdonságkészleteket fednek le, annak ellenére, hogy mindhárom vonalkód adatot képvisel. Erősítse meg Field.Type dobás előtt.
A vonalkód mezők adatot tartalmaznak, de nem jelenik meg kép. Nem IBarcodeGenerator implementációt nem adtak meg. Készítsen egy egyéni generátort, amely megvalósítja GetBarcodeImage(parameters) — ez a kiadás nem szállít beépített vonalkód renderelő motor.
FieldEQ.AsOfficeMath() váratlan eredményeket ad vissza. A mező nem tartalmaz érvényes egyenletutasítást. Ellenőrizze a mező GetFieldCode() kimenetet, mielőtt megpróbálná a konverziót.
FieldInfo’s értéke nem frissül a beállítás után NewValue. A mező nem frissült a változtatás után. Hívja Update() a mezőn a módosítás után NewValue.
Gyakran Ismételt Kérdések
Mit jelent a „transitional” ezeknél a mezőtípusoknál?
Ez nem a hivatalos Word terminológia — a mezőosztályokat ebben a kiadásban a Aspose.Words.Fields névtérbe csoportosítja, amelyek régebbi mezőkódokat (vonalkód mezőket és a pre-Open-XML kompatibilitási mezőket) saját erősen típusos osztályaikon keresztül valósítják meg, ahelyett, hogy csak az általános Field objektumon keresztül lennének kezelve.
A FieldBarcode ugyanazokat a tulajdonságokat használja, mint a FieldDisplayBarcode?
Nem. A FieldBarcode megvalósítja a régi BARCODE (postal/POSTNET) mezőt, és elérhetővé teszi a PostalAddress, FacingIdentificationMark, IsUSPostalAddress és IsBookmark elemeket. A FieldDisplayBarcode és a FieldMergeBarcode más tulajdonságkészletet osztanak meg — a BarcodeType, BarcodeValue, SymbolHeight és a kapcsolódó megjelenítési beállítások.
Megjeleníti-e ez a kiadás a vonalkód képeket?
Nem. A FieldBarcode, FieldDisplayBarcode és a FieldMergeBarcode vonalkód konfigurációs adatokat tárolnak, és elérhetővé teszik a IBarcodeGenerator interfészt, de ebben a kiadásban nincs vonalkód megjelenítő motor — egy egyedi IBarcodeGenerator implementációra van szükség a kép előállításához.
Átalakíthatok egy EQ mezőt egy OfficeMath egyenletté?
Igen, a FieldEQ.AsOfficeMath() segítségével, feltéve hogy a mező kódja valóban egy egyenletet kódol.
Hogyan találhatom meg az összes átmeneti mezőt egy dokumentumban?
Sorolja fel a Document.Range.Fields elemeket, és hasonlítsa össze minden Field.Type-t a megfelelő FieldType konstansokkal (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).