Промежуточные поля

Переходные поля

Это руководство показывает, как работать с типами переходных полей — устаревшими полями штрих-кода и полями совместимости — в Aspose.Words FOSS для .NET.

Aspose.Words FOSS для .NET представляет определённые более старые типы полей Word через специализированный набор классов в the Aspose.Words.Fields namespace, неформально называемом transitional fields. Это поля, которые предшествовали более поздним эквивалентам полей Open XML, но остаются допустимыми внутри .docx documents opened from legacy sources. Каждый переходный тип поля имеет собственный строго типизированный класс, наследующийся от Field, наряду с общим Field объектом, предоставляемым Document.Range.Fields.


Поля штрих-кода

Три класса полей генерируют или отображают данные штрих-кода внутри документа: FieldBarcode (поле BARCODE — устаревший почтовый штрих-код со своими свойствами PostalAddress, IsBookmark, FacingIdentificationMark и IsUSPostalAddress), FieldDisplayBarcode (поле DISPLAYBARCODE), и FieldMergeBarcode (поле MERGEBARCODE, которое также реализует IMergeFieldSurrogate для использования при слиянии почты). FieldDisplayBarcode и FieldMergeBarcode имеют одинаковые универсальные свойства конфигурации штрих-кода — BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar и FixCheckDigit — свойства, которых нет у FieldBarcode.

Класс BarcodeParameters представляет собой контейнер-прокси, раскрывающий объединение обоих наборов свойств (свойства почтового адреса и общие свойства конфигурации штрих-кода), используемый для передачи настроек рендереру штрих-кода, а IBarcodeGenerator — это интерфейс, который реализует пользовательский рендерер, раскрывающий GetBarcodeImage(parameters) и устаревший GetOldBarcodeImage(parameters). Проитерируйте Document.Range.Fields и проверьте Field.Type относительно FieldType.FieldBarcode, FieldType.FieldDisplayBarcode или FieldType.FieldMergeBarcode, чтобы найти эти поля, затем выполните приведение к конкретному классу поля — BarcodeValue и BarcodeType доступны только после приведения к FieldDisplayBarcode или FieldMergeBarcode, а не к FieldBarcode.


Устаревшие поля совместимости

Четыре дополнительных класса полей охватывают более старые коды полей Word, которые реже встречаются в новых документах, но всё ещё появляются в устаревших файлах .docx: FieldBidiOutline (поле BIDIOUTLINE, используемое для нумерации оглавления справа налево), FieldEQ (поле уравнения EQ, которое также раскрывает AsOfficeMath() для преобразования его содержимого в объект OfficeMath), FieldFootnoteRef (поле FOOTNOTEREF, которое делает перекрёстную ссылку на метку сноски или концевой сноски), и FieldInfo (поле INFO, которое считывает или записывает свойство сводной информации документа через его свойства InfoType и NewValue).

Каждый из этих классов полей наследует один и тот же интерфейс Field: GetFieldCode() возвращает исходный текст кода поля, Update() переоценивает результат поля, Unlink() заменяет поле его последним вычисленным результатом, а Remove() удаляет поле из документа. IFieldCodeTokenInfoProvider реализуется в FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode и FieldInfo, поскольку их коды полей содержат структурированные переключатели, выходящие за рамки простой строковой инструкции.


Советы и лучшие практики

  • Всегда проверяйте Field.Type перед приведением общего Field к одному из переходных классов полей — неправильное приведение вызывает InvalidCastException.
  • Вызовите Update() после изменения свойств поля штрих-кода, чтобы Result отражало новую конфигурацию до сохранения документа.
  • FieldEQ.AsOfficeMath() успешно только тогда, когда поле EQ действительно содержит уравнение; проверьте, что Result поля выглядит как формула, прежде чем вызывать его.
  • Используйте Unlink(), когда нужно зафиксировать текущее значение поля как статический текст, отказавшись от возможности пересчитывать его позже.
  • Классы полей штрих-кода несут только данные — данное издание FOSS не включает движок рендеринга штрих-кодов, поэтому вывод GetBarcodeImage() зависит от предоставленной вами реализации IBarcodeGenerator.

Общие проблемы

Issue ПpоблемаCause ПричинаИсправить
InvalidCastException при приведении к FieldНеправильно предположен FieldTypeСначала проверьте Field.Type против соответствующей константы FieldType
FieldEQ.AsOfficeMath() возвращает неожиданные результатыПоле не содержит действительной инструкции уравненияПроверьте вывод GetFieldCode() перед конвертацией
Поле штрихкода не содержит отрисованного изображенияНе предоставлена реализация IBarcodeGeneratorПредоставьте собственный генератор, реализующий GetBarcodeImage()
Значение FieldInfo не обновилось после изменения NewValueПоле не обновленоВызовите Update() на поле после изменения NewValue

FAQ

Что означает «transitional» для этих типов полей?

Это не официальная терминология Word — она группирует классы полей в пространстве имён Aspose.Words.Fields этого издания, которые реализуют старые коды полей (штрих-коды и поля совместимости pre-XML) через собственные строго типизированные классы, а не только через объект Field.

Отображает ли это издание изображения штрих-кодов?

Нет. FieldBarcode, FieldDisplayBarcode и FieldMergeBarcode содержат данные штрих-кода и предоставляют интерфейс IBarcodeGenerator, но в этом издании нет встроенного движка рендеринга штрих-кодов — вы предоставляете собственную реализацию IBarcodeGenerator.

Могу ли я преобразовать поле EQ в уравнение OfficeMath?

Да, через FieldEQ.AsOfficeMath(), при условии, что код поля действительно кодирует уравнение.

Как мне найти все переходные поля в документе?

Перечислите Document.Range.Fields и сравните каждый Field.Type с соответствующими константами FieldType (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).


API Reference Сводка

Класс / МетодОписание:
FieldBarcodeРеализует поле BARCODE
FieldDisplayBarcodeРеализует поле DISPLAYBARCODE
FieldMergeBarcodeРеализует поле штрихкода MERGEBARCODE для слияния писем
BarcodeParametersКонтейнер для настроек штрихкода, передаваемых генератору
IBarcodeGeneratorИнтерфейс для пользовательского рендерера изображений штрихкода
FieldBidiOutlineРеализует поле BIDIOUTLINE
FieldEQРеализует поле уравнения EQ; AsOfficeMath() преобразуется в OfficeMath
FieldFootnoteRefРеализует поле FOOTNOTEREF
FieldInfoРеализует поле свойства документа INFO

См. также:

 Русский