Jak pracować z polami przejściowymi w .NET

Jak pracować z polami przejściowymi w .NET

Jak pracować z polami przejściowymi w .NET

Aspose.Words FOSS dla .NET reprezentuje grupę starszych typów pól Word — pola kodów kreskowych i kilka pól kompatybilności przed Open-XML — poprzez dedykowane klasy w Aspose.Words.Fields namespace, nieformalnie nazywany transitional pola tutaj. Ten przewodnik pokazuje, jak je znaleźć, odczytać i skonfigurować. Każda klasa pola przejściowego dziedziczy po bazowym Field typie, obok generycznego Field obiektu udostępnianego przez Document.Range.Fields.


Przewodnik krok po kroku

Krok 1: Znajdź pola przejściowe w dokumencie

Wylicz Document.Range.Fields i porównaj Type każdego pola (wartość FieldType) z odpowiednimi stałymi — FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef lub FieldInfo — następnie rzutuj ogólny Field na pasującą klasę, aby uzyskać dostęp do jej specyficznych właściwości. Zawsze sprawdzaj Type przed rzutowaniem: rzutowanie na niewłaściwą klasę pola powoduje InvalidCastException.


Krok 2: Skonfiguruj pole DISPLAYBARCODE lub MERGEBARCODE

FieldDisplayBarcode (pole DISPLAYBARCODE) oraz FieldMergeBarcode (pole MERGEBARCODE, które dodatkowo implementuje IMergeFieldSurrogate dla scalania korespondencji) mają ten sam zestaw właściwości konfiguracyjnych kodów kreskowych: BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar i FixCheckDigit. Ustaw je na instancji pola, a następnie wywołaj Update(), aby Result odzwierciedlało nową konfigurację przed zapisaniem dokumentu.


Krok 3: Odczytaj dane pola Legacy BARCODE (Postal)

FieldBarcode implementuje starsze pole BARCODE, które jest konkretnie polem amerykańskiego kodu pocztowego (POSTNET), a nie uniwersalnym kodem kreskowym — nie dzieli właściwości BarcodeType/BarcodeValue z Kroku 2. Zamiast tego udostępnia PostalAddress (adres, który kod kreskowy koduje), FacingIdentificationMark, IsUSPostalAddress i IsBookmark. Sprawdź Field.Type względem FieldType.FieldBarcode przed odczytaniem tych właściwości, ponieważ rzutowanie pola DISPLAYBARCODE lub MERGEBARCODE na FieldBarcode nie ujawni oczekiwanych właściwości.


Krok 4: Renderuj obrazy kodów kreskowych przy użyciu własnego generatora

Ta edycja FOSS zawiera dane pól kodów kreskowych, ale nie zawiera silnika renderującego kody kreskowe. BarcodeParameters jest kontenerem przepustowym, który konsoliduje ustawienia z rodziny pól kodów kreskowych — właściwości DISPLAYBARCODE/MERGEBARCODE z Kroku 2 oraz właściwości pocztowe z Kroku 3 — w pojedynczy obiekt przekazywany rendererowi. Zaimplementuj IBarcodeGenerator, udostępniając GetBarcodeImage(parameters) i starsze GetOldBarcodeImage(parameters), aby dostarczyć rzeczywiste renderowanie obrazu; bez dostarczonej implementacji pola kodów kreskowych zawierają jedynie dane konfiguracyjne.


Krok 5: Pracuj z polami Legacy Compatibility

Cztery inne klasy obsługują starsze kody pól, które wciąż występują w starszych plikach .docx. FieldBidiOutline implementuje pole BIDIOUTLINE służące do numeracji konspektu od prawej do lewej i nie udostępnia żadnych właściwości poza wspólną powierzchnią Field. FieldEQ implementuje pole równania EQ i dodatkowo udostępnia AsOfficeMath(), aby przekształcić jego zawartość w obiekt OfficeMath — działa to tylko wtedy, gdy pole rzeczywiście koduje równanie. FieldFootnoteRef implementuje pole FOOTNOTEREF, które odwołuje się do przypisu lub notatki końcowej, i również nie udostępnia żadnych właściwości poza wspólną powierzchnią Field. FieldInfo implementuje pole INFO, odczytując lub zapisując właściwość podsumowania dokumentu poprzez jego właściwości InfoType i NewValue.


Krok 6: Zaktualizuj lub zamroź wartość pola przejściowego

Każda klasa pola przejściowego dziedziczy GetFieldCode() (tekst kodu leżący u podstaw pola), Update() (ponownie ocenia wynik), Unlink() (zastępuje pole jego ostatnio obliczonym wynikiem jako tekst statyczny) oraz Remove() (usuwa pole). Wywołaj Update() po zmianie konfiguracji dowolnego pola, aby Result odzwierciedlało zmianę, oraz użyj Unlink(), gdy bieżąca wartość pola powinna być zamrożona zamiast pozostawać przeliczalna.


Typowe problemy i rozwiązania

InvalidCastException przy rzutowaniu Field na klasę pola przejściowego. Niepoprawny FieldType zostało przyjęte. Sprawdź Field.Type względem dopasowania FieldType stałej przed rzutowaniem.

A DISPLAYBARCODE/MERGEBARCODE właściwości pola są nieobecne po rzutowaniu. Pole zostało rzutowane na FieldBarcode zamiast FieldDisplayBarcode/FieldMergeBarcode (lub odwrotnie) — te klasy udostępniają różne zestawy właściwości, mimo że wszystkie trzy reprezentują dane kodów kreskowych. Potwierdź Field.Type przed rzutowaniem.

Pola Barcode zawierają dane, ale nie renderuje się żaden obraz. Nie IBarcodeGenerator implementacja została dostarczona. Dostarcz własny generator implementujący GetBarcodeImage(parameters) — ta edycja nie zawiera wbudowanego silnika renderowania kodów kreskowych.

FieldEQ.AsOfficeMath() zwraca nieoczekiwane wyniki. Pole nie zawiera prawidłowej instrukcji równania. Sprawdź pole’s GetFieldCode() wyjście przed podjęciem próby konwersji.

FieldInfowartość nie jest aktualizowana po ustawieniu NewValue. Pole nie zostało odświeżone po zmianie. Wywołaj Update() na polu po modyfikacji NewValue.


Najczęściej zadawane pytania

Co oznacza „transitional” w odniesieniu do tych typów pól?

To nie jest oficjalna terminologia Word — grupuje klasy pól w przestrzeni nazw Aspose.Words.Fields tej edycji, które implementują starsze kody pól (pola kodów kreskowych i pola zgodności przed Open-XML) za pomocą własnych silnie typowanych klas, zamiast być obsługiwane wyłącznie przez ogólny obiekt Field.

Czy FieldBarcode używa tych samych właściwości co FieldDisplayBarcode?

Nie. FieldBarcode implementuje starsze pole BARCODE (postal/POSTNET) i udostępnia PostalAddress, FacingIdentificationMark, IsUSPostalAddress oraz IsBookmark. FieldDisplayBarcode i FieldMergeBarcode mają inny zestaw właściwości — BarcodeType, BarcodeValue, SymbolHeight oraz powiązane ustawienia renderowania.

Czy ta edycja renderuje obrazy kodów kreskowych?

Nie. FieldBarcode, FieldDisplayBarcode i FieldMergeBarcode przechowują dane konfiguracyjne kodów kreskowych i udostępniają interfejs IBarcodeGenerator, ale w tej edycji nie jest dostarczany silnik renderujący kody kreskowe — wymagana jest własna implementacja IBarcodeGenerator, aby wygenerować obraz.

Czy mogę przekonwertować pole EQ na równanie OfficeMath?

Tak, za pośrednictwem FieldEQ.AsOfficeMath(), pod warunkiem że kod pola rzeczywiście koduje równanie.

Jak znaleźć wszystkie pola przejściowe w dokumencie?

Wylicz Document.Range.Fields i porównaj każdy Field.Type z odpowiednimi stałymi FieldType (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).


Zobacz także

 Polski