Přechodná pole
Přechodová pole
Tento průvodce ukazuje, jak pracovat s typy přechodových polí—staré čárové kódy a kompatibilní pole—v Aspose.Words FOSS pro .NET.
Aspose.Words FOSS pro .NET představuje určité starší typy polí Wordu prostřednictvím vyhrazené sady tříd v Aspose.Words.Fields jmenném prostoru, neformálně nazývaném transitional fields. Jedná se o pole, která předcházejí pozdějším ekvivalentům Open XML pole, ale zůstávají platná uvnitř .docx dokumentů otevřených ze starších zdrojů. Každý přechodový typ pole má vlastní silně typovanou třídu odvozenou od Field, spolu s obecným Field objektem vystaveným v Document.Range.Fields.
Pole čárových kódů
Tři třídy polí generují nebo zobrazují data čárového kódu uvnitř dokumentu: FieldBarcode (pole BARCODE—legacy poštovní čárový kód se svými vlastnostmi PostalAddress, IsBookmark, FacingIdentificationMark a IsUSPostalAddress), FieldDisplayBarcode (pole DISPLAYBARCODE) a FieldMergeBarcode (pole MERGEBARCODE, které také implementuje IMergeFieldSurrogate pro použití během hromadné korespondence). FieldDisplayBarcode a FieldMergeBarcode sdílejí stejné obecné konfigurační vlastnosti čárových kódů—BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar a FixCheckDigit—vlastnosti, které FieldBarcode nemá.
Třída BarcodeParameters je průchozí kontejner, který vystavuje sjednocení obou sad vlastností (vlastnosti poštovní adresy a obecné konfigurační vlastnosti čárových kódů), slouží k předání nastavení rendereru čárových kódů, a IBarcodeGenerator je rozhraní, které implementuje vlastní renderer, vystavující GetBarcodeImage(parameters) a legacy GetOldBarcodeImage(parameters). Procházejte Document.Range.Fields a kontrolujte Field.Type vůči FieldType.FieldBarcode, FieldType.FieldDisplayBarcode nebo FieldType.FieldMergeBarcode pro nalezení těchto polí, poté přetypujte na konkrétní třídu pole—BarcodeValue a BarcodeType jsou dostupné pouze po přetypování na FieldDisplayBarcode nebo FieldMergeBarcode, ne na FieldBarcode.
Legacy pole kompatibility
Čtyři další třídy polí pokrývají starší kódy polí Wordu, které jsou méně běžné v nově vytvářených dokumentech, ale stále se objevují v legacy .docx souborech: FieldBidiOutline (pole BIDIOUTLINE, pro číslování osnov zprava doleva), FieldEQ (pole rovnice EQ, které také poskytuje AsOfficeMath() k převodu jeho obsahu na objekt OfficeMath), FieldFootnoteRef (pole FOOTNOTEREF, které odkazuje na značku poznámky pod čarou nebo koncové poznámky), a FieldInfo (pole INFO, které čte nebo zapisuje vlastnost souhrnných informací dokumentu prostřednictvím jeho vlastností InfoType a NewValue).
Každá z těchto tříd polí dědí stejné rozhraní Field: GetFieldCode() vrací podkladový text kódu pole, Update() znovu vyhodnocuje výsledek pole, Unlink() nahradí pole jeho posledním vypočteným výsledkem a Remove() odstraní pole z dokumentu. IFieldCodeTokenInfoProvider je implementováno v FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode a FieldInfo, protože jejich kódy polí obsahují strukturované přepínače nad rámec jednoduchého řetězce instrukcí.
Tipy a osvědčené postupy
- Vždy zkontrolujte
Field.Typepřed přetypováním obecnéhoFieldna jednu z přechodových tříd polí — nesprávné přetypování vyvoláInvalidCastException. - Zavolejte
Update()po změně vlastností pole čárového kódu, abyResultodráželo novou konfiguraci před uložením dokumentu. FieldEQ.AsOfficeMath()uspěje pouze tehdy, když pole EQ skutečně kóduje rovnici; před jeho voláním ověřte, žeResultpole vypadá jako vzorec.- Použijte
Unlink(), když chcete zmrazit aktuální hodnotu pole jako statický text a zrušit možnost jejího pozdějšího přepočtu. - Třídy polí čárových kódů nesou jen data — tato FOSS edice neobsahuje renderovací engine pro čárové kódy, takže výstup
GetBarcodeImage()závisí na implementaciIBarcodeGenerator, kterou poskytnete.
Běžné problémy
| Issue | Cause | Opravit |
|---|---|---|
InvalidCastException při přetypování Field | Předpokládán nesprávný FieldType | Nejprve zkontrolujte Field.Type vůči odpovídající konstantě FieldType |
FieldEQ.AsOfficeMath() vrací neočekávané výsledky | Pole neobsahuje platnou instrukci rovnice | Zkontrolujte výstup GetFieldCode() před konverzí |
| Pole čárového kódu neobsahuje vykreslený obrázek | Nebyla poskytnuta implementace IBarcodeGenerator | Poskytněte vlastní generátor, který implementuje GetBarcodeImage() |
Hodnota FieldInfo nebyla aktualizována po změně NewValue | Pole nebylo obnoveno | Zavolejte Update() na pole po úpravě NewValue |
FAQ
Co znamená „transitional“ pro tyto typy polí?
Nejedná se o oficiální terminologii Wordu — seskupuje třídy polí v tomto vydání v prostoru názvů Aspose.Words.Fields, které implementují starší kódy polí (čárový kód a pole kompatibility před Open-XML) pomocí vlastních silně typovaných tříd místo toho, aby byly zpracovány pouze prostřednictvím obecného objektu Field.
Zobrazuje toto vydání obrázky čárových kódů?
Ne. FieldBarcode, FieldDisplayBarcode a FieldMergeBarcode obsahují data čárových kódů a vystavují rozhraní IBarcodeGenerator, ale v tomto vydání není součástí žádný vestavěný engine pro vykreslování čárových kódů – musíte dodat vlastní implementaci IBarcodeGenerator.
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?
Vyjmenujte Document.Range.Fields a porovnejte každý Field.Type s příslušnými konstantami FieldType (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).
API Reference Shrnutí
| Třída / Metoda | Popis: |
|---|---|
FieldBarcode | Implementuje pole BARCODE |
FieldDisplayBarcode | Implementuje pole DISPLAYBARCODE |
FieldMergeBarcode | Implementuje MERGEBARCODE mail-merge barcode field |
BarcodeParameters | Kontejner pro nastavení čárových kódů předávaných generátoru |
IBarcodeGenerator | Rozhraní pro vlastní vykreslovač obrázku čárového kódu |
FieldBidiOutline | Implementuje pole BIDIOUTLINE |
FieldEQ | Implementuje pole rovnice EQ; AsOfficeMath() převádí na OfficeMath |
FieldFootnoteRef | Implementuje pole FOOTNOTEREF |
FieldInfo | Implementuje pole INFO vlastnosti dokumentu |