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.Type przed rzutowaniem ogólnego Field na jedną z przejściowych klas pól — nieprawidłowe rzutowanie powoduje InvalidCastException.
  • Wywołaj Update() po zmianie właściwości pola kodu kreskowego, aby Result odzwierciedlało nową konfigurację przed zapisaniem dokumentu.
  • FieldEQ.AsOfficeMath() udaje się tylko wtedy, gdy pole EQ faktycznie koduje równanie; zweryfikuj, czy Result pola 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 implementacji IBarcodeGenerator, którą dostarczasz.

Typowe problemy

ProblemPrzyczynaNapraw
InvalidCastException podczas rzutowania FieldZałożono niewłaściwy FieldTypeNajpierw sprawdź Field.Type względem pasującej stałej FieldType
FieldEQ.AsOfficeMath() zwraca nieoczekiwane wynikiPole nie zawiera prawidłowej instrukcji równaniaSprawdź wyjście GetFieldCode() przed konwersją
Pole kodu kreskowego nie ma wygenerowanego obrazuNie podano implementacji IBarcodeGeneratorPodaj niestandardowy generator, który implementuje GetBarcodeImage()
Wartość FieldInfo nie została zaktualizowana po zmianie NewValuePole nie zostało odświeżoneWywoł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 / MetodaOpis
FieldBarcodeImplementuje pole BARCODE
FieldDisplayBarcodeImplementuje pole DISPLAYBARCODE
FieldMergeBarcodeImplementuje pole MERGEBARCODE mail-merge barcode
BarcodeParametersKontener ustawień barcode przekazywanych do generatora
IBarcodeGeneratorInterfejs dla własnego renderera obrazu barcode
FieldBidiOutlineImplementuje pole BIDIOUTLINE
FieldEQImplementuje pole równania EQ; AsOfficeMath() konwertuje na OfficeMath
FieldFootnoteRefImplementuje pole FOOTNOTEREF
FieldInfoImplementuje pole właściwości dokumentu INFO

Zobacz także

 Polski