Pola przejściowe
Pola przejściowe
Ten przewodnik pokazuje, jak pracować z typami pól przejściowych — starszymi polami kodów kreskowych i polami zgodności — w Aspose.Words FOSS dla .NET.
Aspose.Words FOSS for .NET reprezentuje pewne starsze typy pól Word za pośrednictwem dedykowanego zestawu klas w Aspose.Words.Fields przestrzeni nazw, nieformalnie zwanej transitional pola. Są to pola, które poprzedzają późniejsze odpowiedniki pól Open XML, ale pozostają ważne wewnątrz .docx dokumentów otwieranych ze starszych źródeł. Każdy przejściowy typ pola ma własną silnie typowaną klasę, dziedziczącą po Field, wraz z ogólnym Field obiektem udostępnianym przez Document.Range.Fields.
Pola kodów kreskowych
Trzy klasy pól generują lub wyświetlają dane kodu kreskowego w dokumencie: FieldBarcode (pole BARCODE — starszy kod pocztowy z własnymi właściwościami PostalAddress, IsBookmark, FacingIdentificationMark i IsUSPostalAddress), FieldDisplayBarcode (pole DISPLAYBARCODE), oraz FieldMergeBarcode (pole MERGEBARCODE, które dodatkowo implementuje IMergeFieldSurrogate do użycia podczas scalania poczty). FieldDisplayBarcode i FieldMergeBarcode udostępniają te same ogólne właściwości konfiguracyjne kodu kreskowego — BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar i FixCheckDigit — właściwości, których nie posiada FieldBarcode.
Klasa BarcodeParameters jest kontenerem przepuszczającym, udostępniającym połączenie obu zestawów właściwości (właściwości adresu pocztowego oraz ogólne właściwości konfiguracji kodu kreskowego), używanym do przekazywania ustawień renderującemu kodów kreskowych, a IBarcodeGenerator jest interfejsem, który implementuje niestandardowy renderer, udostępniając GetBarcodeImage(parameters) oraz starszy GetOldBarcodeImage(parameters). Iteruj Document.Range.Fields i sprawdzaj Field.Type względem FieldType.FieldBarcode, FieldType.FieldDisplayBarcode lub FieldType.FieldMergeBarcode, aby zlokalizować te pola, a następnie rzutuj na konkretną klasę pola — BarcodeValue i BarcodeType są dostępne tylko po rzutowaniu na FieldDisplayBarcode lub FieldMergeBarcode, a nie na FieldBarcode.
Pola zgodności ze starszymi wersjami
Cztery dodatkowe klasy pól obejmują starsze kody pól Word, które są mniej powszechne w nowo tworzonych dokumentach, ale nadal występują w starszych plikach .docx: FieldBidiOutline (pole BIDIOUTLINE, służące do numeracji konspektu od prawej do lewej), FieldEQ (pole równania EQ, które dodatkowo udostępnia AsOfficeMath() do konwersji jego zawartości na obiekt OfficeMath), FieldFootnoteRef (pole FOOTNOTEREF, które odwołuje się do znaku przypisu dolnego lub końcowego), oraz FieldInfo (pole INFO, które odczytuje lub zapisuje właściwość podsumowania-informacji dokumentu za pośrednictwem swoich właściwości InfoType i NewValue).
Każda z tych klas pól dziedziczy ten sam interfejs Field: GetFieldCode() zwraca podstawowy tekst kodu pola, Update() ponownie ocenia wynik pola, Unlink() zastępuje pole jego ostatnio obliczonym wynikiem oraz Remove() usuwa pole z dokumentu. IFieldCodeTokenInfoProvider jest zaimplementowane przez FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode i FieldInfo, ponieważ ich kody pól zawierają strukturalne przełączniki wykraczające poza prosty ciąg instrukcji.
Wskazówki i najlepsze praktyki
- Zawsze sprawdzaj
Field.Typeprzed rzutowaniem ogólnegoFieldna jedną z przejściowych klas pól — nieprawidłowe rzutowanie powodujeInvalidCastException. - Wywołaj
Update()po zmianie właściwości pola kodu kreskowego, abyResultodzwierciedlało nową konfigurację przed zapisaniem dokumentu. FieldEQ.AsOfficeMath()udaje się tylko wtedy, gdy pole EQ faktycznie koduje równanie; zweryfikuj, czyResultpola wygląda jak formuła, zanim je wywołasz.- Użyj
Unlink(), gdy chcesz zamrozić bieżącą wartość pola jako tekst statyczny, rezygnując z możliwości ponownego obliczenia go później. - Klasy pól kodu kreskowego jedynie przenoszą dane — ta edycja FOSS nie zawiera silnika renderowania kodów kreskowych, więc wyjście
GetBarcodeImage()zależy od implementacjiIBarcodeGenerator, którą dostarczasz.
Typowe problemy
| Problem | Przyczyna | Napraw |
|---|---|---|
InvalidCastException podczas rzutowania Field | Założono niewłaściwy FieldType | Najpierw sprawdź Field.Type względem pasującej stałej FieldType |
FieldEQ.AsOfficeMath() zwraca nieoczekiwane wyniki | Pole nie zawiera prawidłowej instrukcji równania | Sprawdź wyjście GetFieldCode() przed konwersją |
| Pole kodu kreskowego nie ma wygenerowanego obrazu | Nie podano implementacji IBarcodeGenerator | Podaj niestandardowy generator, który implementuje GetBarcodeImage() |
Wartość FieldInfo nie została zaktualizowana po zmianie NewValue | Pole nie zostało odświeżone | Wywołaj Update() na polu po zmodyfikowaniu NewValue |
FAQ
Co oznacza “transitional” w odniesieniu do tych typów pól?
Nie jest to oficjalna terminologia Worda — 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 generyczny obiekt Field.
Czy ta edycja renderuje obrazy kodów kreskowych?
Nie. FieldBarcode, FieldDisplayBarcode i FieldMergeBarcode przechowują dane kodów kreskowych i udostępniają interfejs IBarcodeGenerator, ale w tej edycji nie ma wbudowanego silnika renderowania kodów kreskowych — musisz dostarczyć własną implementację IBarcodeGenerator.
Czy mogę przekształcić pole EQ w równanie OfficeMath?
Tak, za pomocą FieldEQ.AsOfficeMath(), pod warunkiem że kod pola rzeczywiście koduje równanie.
Jak znaleźć wszystkie pola przejściowe w dokumencie?
Wymień Document.Range.Fields i porównaj każdy Field.Type z odpowiednimi stałymi FieldType (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).
API Reference Podsumowanie
| Klasa / Metoda | Opis |
|---|---|
FieldBarcode | Implementuje pole BARCODE |
FieldDisplayBarcode | Implementuje pole DISPLAYBARCODE |
FieldMergeBarcode | Implementuje pole MERGEBARCODE mail-merge barcode |
BarcodeParameters | Kontener ustawień barcode przekazywanych do generatora |
IBarcodeGenerator | Interfejs dla własnego renderera obrazu barcode |
FieldBidiOutline | Implementuje pole BIDIOUTLINE |
FieldEQ | Implementuje pole równania EQ; AsOfficeMath() konwertuje na OfficeMath |
FieldFootnoteRef | Implementuje pole FOOTNOTEREF |
FieldInfo | Implementuje pole właściwości dokumentu INFO |