Как работать с переходными полями в .NET
Как работать с переходными полями в .NET
Aspose.Words FOSS for .NET представляет группу старых типов полей Word — поля штрихкода и несколько полей совместимости до Open-XML — через специальные классы в the Aspose.Words.Fields пространство имён, неформально называемое transitional поля здесь. Это руководство показывает, как находить, читать и настраивать их. Каждый переходный класс поля наследуется от базового Field тип, вместе с generic Field объект, предоставляемый Document.Range.Fields.
Пошаговое руководство
Шаг 1: Найти переходные поля в документе
Переберите Document.Range.Fields и сравните Type каждого поля (значение FieldType) с соответствующими константами — FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef или FieldInfo — затем приведите общий Field к соответствующему классу, чтобы получить доступ к его специфическим свойствам. Всегда проверяйте Type перед приведением: приведение к неверному классу поля вызывает InvalidCastException.
Шаг 2: Настроить поле DISPLAYBARCODE или MERGEBARCODE
FieldDisplayBarcode (поле DISPLAYBARCODE) и FieldMergeBarcode (поле MERGEBARCODE, которое также реализует IMergeFieldSurrogate для слияния почты) используют один и тот же набор свойств конфигурации штрихкода: BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar и FixCheckDigit. Установите их в экземпляре поля, затем вызовите Update(), чтобы Result отразил новую конфигурацию перед сохранением документа.
Шаг 3: Чтение данных устаревшего поля BARCODE (почтовый)
FieldBarcode реализует более старое поле BARCODE, которое представляет собой конкретно американский почтовый штрихкод (POSTNET), а не универсальный штрихкод — оно не использует свойства BarcodeType/BarcodeValue из Шага 2. Вместо этого оно раскрывает PostalAddress (адрес, закодированный в штрихкоде), FacingIdentificationMark, IsUSPostalAddress и IsBookmark. Проверьте Field.Type относительно FieldType.FieldBarcode перед чтением этих свойств, поскольку приведение поля DISPLAYBARCODE или MERGEBARCODE к FieldBarcode не откроет ожидаемые свойства.
Шаг 4: Отрисовка изображений штрихкода с помощью пользовательского генератора
Это FOSS-издание содержит данные поля штрихкода, но не включает движок отрисовки штрихкода. BarcodeParameters — это сквозной контейнер, который объединяет настройки из любой семьи полей штрихкода — свойства DISPLAYBARCODE/MERGEBARCODE из Шага 2 и почтовые свойства из Шага 3 — в один объект, передаваемый рендереру. Реализуйте IBarcodeGenerator, раскрывая GetBarcodeImage(parameters) и унаследованное GetOldBarcodeImage(parameters), чтобы обеспечить фактическую отрисовку изображения; без предоставленной реализации поля штрихкода содержат только данные конфигурации.
Шаг 5: Работа со старыми полями совместимости
Четыре других класса охватывают старые коды полей, которые все еще встречаются в унаследованных файлах .docx. FieldBidiOutline реализует поле BIDIOUTLINE для нумерации оглавления справа налево и не раскрывает никаких свойств, кроме общей поверхности Field. FieldEQ реализует уравнение EQ и дополнительно раскрывает AsOfficeMath() для преобразования его содержимого в объект OfficeMath — это удаётся только когда поле действительно содержит уравнение. FieldFootnoteRef реализует поле FOOTNOTEREF, которое перекрёстно ссылается на метку сноски или концевой сноски, и также не раскрывает свойств, кроме общей поверхности Field. FieldInfo реализует поле INFO, читая или записывая свойство сводной информации документа через свойства InfoType и NewValue.
Шаг 6: Обновление или заморозка значения переходного поля
Каждый класс переходного поля наследует GetFieldCode() (текст кода, лежащий в основе поля), Update() (повторно вычисляет результат), Unlink() (заменяет поле его последним вычисленным результатом в виде статического текста) и Remove() (удаляет поле). Вызовите Update() после изменения любой конфигурации поля, чтобы Result отразил изменение, и используйте Unlink(), когда текущее значение поля должно быть зафиксировано, а не оставаться пере вычисляемым.
Общие проблемы и решения
InvalidCastException when casting a Field к переходному полевому классу. The wrong FieldType было предположено. Проверьте Field.Type против соответствующего FieldType константу перед приведением типа.
A DISPLAYBARCODE/MERGEBARCODE свойства поля отсутствуют после приведения типа. Поле было приведено к FieldBarcode вместо FieldDisplayBarcode/FieldMergeBarcode (или наоборот) — эти классы предоставляют разные наборы свойств, хотя все три представляют данные штрихкода. Подтвердите Field.Type до приведения типа.
Поля штрихкода содержат данные, но изображение не отображается. Нет IBarcodeGenerator реализация не была предоставлена. Предоставьте пользовательский генератор, реализующий GetBarcodeImage(parameters) — эта версия не включает встроенный движок отрисовки штрихкодов.
FieldEQ.AsOfficeMath() возвращает неожиданные результаты. Поле не содержит действительной инструкции уравнения. Проверьте поле’s GetFieldCode() вывод перед попыткой конвертации.
FieldInfoЗначение не обновляется после установки NewValue. Поле не обновилось после изменения. Вызов Update() на поле после изменения NewValue.
Часто задаваемые вопросы
Что означает «переходный» для этих типов полей?
Это не официальная терминология Word — она группирует классы полей в пространстве имён Aspose.Words.Fields этой редакции, которые реализуют более старые коды полей (поле штрихкода и поля совместимости до Open-XML) через их собственные строго типизированные классы, а не только через универсальный объект Field.
Использует ли FieldBarcode те же свойства, что и FieldDisplayBarcode?
Нет. FieldBarcode реализует устаревшее поле BARCODE (postal/POSTNET) и предоставляет PostalAddress, FacingIdentificationMark, IsUSPostalAddress и IsBookmark. FieldDisplayBarcode и FieldMergeBarcode используют иной набор свойств — BarcodeType, BarcodeValue, SymbolHeight и связанные настройки рендеринга.
Отображает ли эта редакция изображения штрихкодов?
Нет. FieldBarcode, FieldDisplayBarcode и FieldMergeBarcode содержат данные конфигурации штрихкода и предоставляют интерфейс IBarcodeGenerator, но в этой редакции нет движка рендеринга штрихкодов — требуется пользовательская реализация IBarcodeGenerator для создания изображения.
Могу ли я преобразовать поле EQ в уравнение OfficeMath?
Да, через FieldEQ.AsOfficeMath(), при условии, что код поля действительно кодирует уравнение.
Как мне найти все переходные поля в документе?
Переберите Document.Range.Fields и сравните каждый Field.Type с соответствующими константами FieldType (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).