Промежуточные поля
Переходные поля
Это руководство показывает, как работать с типами переходных полей — устаревшими полями штрих-кода и полями совместимости — в 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 |