Jak pracovat s přechodovými poli v .NET
Jak pracovat s přechodovými poli v .NET
Aspose.Words FOSS pro .NET představuje skupinu starších typů polí Wordu — pole čárových kódů a několik polí kompatibility před Open-XML — prostřednictvím dedikovaných tříd v Aspose.Words.Fields jmenném prostoru, neformálně nazývaném transitional polí zde. Tento průvodce ukazuje, jak je najít, přečíst a nakonfigurovat. Každá třída přechodového pole dědí z základního Field typu, spolu s generickým Field objektem vystaveným Document.Range.Fields.
Krok za krokem
Krok 1: Najděte přechodová pole v dokumentu
Procházejte Document.Range.Fields a porovnejte Type každého pole (hodnota FieldType) s příslušnými konstantami — FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef nebo FieldInfo — poté přetypujte obecný Field na odpovídající třídu, abyste získali přístup k jejím specifickým vlastnostem. Vždy zkontrolujte Type před přetypováním: přetypování na nesprávnou třídu pole vyvolá InvalidCastException.
Krok 2: Nakonfigurujte pole DISPLAYBARCODE nebo MERGEBARCODE
FieldDisplayBarcode (pole DISPLAYBARCODE) a FieldMergeBarcode (pole MERGEBARCODE, které také implementuje IMergeFieldSurrogate pro hromadnou korespondenci) sdílejí stejnou sadu vlastností konfigurace čárových kódů: BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar a FixCheckDigit. Nastavte je na instanci pole, pak zavolejte Update(), aby Result odrážel novou konfiguraci před uložením dokumentu.
Krok 3: Načíst data starého pole BARCODE (poštovní)
FieldBarcode implementuje starší pole BARCODE, které je konkrétně polem US poštovního čárového kódu (POSTNET) místo obecného čárového kódu — nesdílí vlastnosti BarcodeType/BarcodeValue z Kroku 2. Místo toho poskytuje PostalAddress (adresa, kterou čárový kód kóduje), FacingIdentificationMark, IsUSPostalAddress a IsBookmark. Před čtením těchto vlastností zkontrolujte Field.Type oproti FieldType.FieldBarcode specificky, protože převod pole DISPLAYBARCODE nebo MERGEBARCODE na FieldBarcode by neodhalil očekávané vlastnosti.
Krok 4: Vygenerovat obrázky čárových kódů pomocí vlastního generátoru
Tato FOSS edice obsahuje data pole čárového kódu, ale neobsahuje motor pro vykreslování čárových kódů. BarcodeParameters je průchozí kontejner, který konsoliduje nastavení z libovolné rodiny polí čárového kódu — vlastnosti DISPLAYBARCODE/MERGEBARCODE z Kroku 2 a poštovní vlastnosti z Kroku 3 — do jediného objektu předaného vykreslovači. Implementujte IBarcodeGenerator, který poskytuje GetBarcodeImage(parameters) a starý GetOldBarcodeImage(parameters), aby dodal skutečné vykreslování obrázku; bez dodané implementace pole čárových kódů nesou pouze konfigurační data.
Krok 5: Pracovat se starými kompatibilními poli
Čtyři další třídy pokrývají starší kódy polí, které se stále nacházejí ve starých souborech .docx. FieldBidiOutline implementuje pole BIDIOUTLINE pro číslování osnovy zprava doleva a neuvádí žádné vlastnosti nad rámec běžného povrchu Field. FieldEQ implementuje rovnicové pole EQ a navíc poskytuje AsOfficeMath() pro převod jeho obsahu na objekt OfficeMath — to se podaří pouze, když pole skutečně kóduje rovnici. FieldFootnoteRef implementuje pole FOOTNOTEREF, které odkazuje na značku poznámky pod čarou nebo koncové poznámky, a také neuvádí žádné vlastnosti nad rámec běžného povrchu Field. FieldInfo implementuje pole INFO, čte nebo zapisuje vlastnost souhrnných informací dokumentu prostřednictvím svých vlastností InfoType a NewValue.
Krok 6: Aktualizovat nebo zmrazit hodnotu přechodového pole
Každá třída přechodového pole dědí GetFieldCode() (základní text kódu pole), Update() (přepočítá výsledek), Unlink() (nahrazuje pole jeho posledním vypočteným výsledkem jako statickým textem) a Remove() (odstraní pole). Po změně konfigurace libovolného pole zavolejte Update(), aby Result odrážel změnu, a použijte Unlink(), když má být aktuální hodnota pole zmražena místo toho, aby zůstala přepočitatelná.
Běžné problémy a opravy
InvalidCastException při přetypování Field na třídu přechodového pole. Špatné FieldType bylo předpokládáno. Zkontrolujte Field.Type proti odpovídajícímu FieldType konstantě před přetypováním.
A DISPLAYBARCODE/MERGEBARCODE vlastnosti pole chybí po přetypování. Pole bylo přetypováno na FieldBarcode namísto FieldDisplayBarcode/FieldMergeBarcode (nebo naopak) — tyto třídy vystavují různé sady vlastností, i když všechny tři představují data čárových kódů. Potvrďte Field.Type před přetypováním.
Pole čárových kódů obsahují data, ale žádný obrázek se nezobrazí. Ne IBarcodeGenerator implementace byla poskytnuta. Poskytněte vlastní generátor implementující GetBarcodeImage(parameters) — tato edice neobsahuje vestavěný engine pro vykreslování čárových kódů.
FieldEQ.AsOfficeMath() vrací neočekávané výsledky. Pole neobsahuje platný příkaz rovnice. Zkontrolujte pole GetFieldCode() výstup před pokusem o konverzi.
FieldInfo’s hodnota není po nastavení aktualizována NewValue. Pole nebylo po změně obnoveno. Zavolejte Update() na pole po úpravě NewValue.
Často kladené otázky
Co znamená „transitional“ pro tyto typy polí?
Nejedná se o oficiální terminologii Wordu — seskupuje třídy polí v Aspose.Words.Fields jmenném prostoru této edice, které implementují starší kódy polí (pole čárových kódů a kompatibilní pole před Open-XML) pomocí vlastních silně typovaných tříd místo toho, aby byly zpracovávány pouze pomocí obecného objektu Field.
Používá FieldBarcode stejné vlastnosti jako FieldDisplayBarcode?
Ne. FieldBarcode implementuje starší pole BARCODE (postal/POSTNET) a zveřejňuje PostalAddress, FacingIdentificationMark, IsUSPostalAddress a IsBookmark. FieldDisplayBarcode a FieldMergeBarcode sdílejí jinou sadu vlastností — BarcodeType, BarcodeValue, SymbolHeight a související nastavení vykreslování.
Vykresluje tato edice obrázky čárových kódů?
Ne. FieldBarcode, FieldDisplayBarcode a FieldMergeBarcode obsahují konfigurační data čárových kódů a vystavují rozhraní IBarcodeGenerator, ale v této edici není součástí žádný motor pro vykreslování čárových kódů — je vyžadována vlastní implementace IBarcodeGenerator pro vytvoření obrázku.
Mohu převést pole EQ na rovnici OfficeMath?
Ano, přes FieldEQ.AsOfficeMath(), pokud kód pole skutečně kóduje rovnici.
Jak najdu všechna přechodová pole v dokumentu?
Vypište Document.Range.Fields a porovnejte každý Field.Type s příslušnými konstantami FieldType (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).