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

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

Цей посібник показує, як працювати з типами перехідних полів — застарілими штрих-кодами та полями сумісності — у Aspose.Words FOSS для .NET.

Aspose.Words FOSS для .NET представляє певні старі типи полів Word через спеціальний набір класів у the Aspose.Words.Fields просторі імен, неофіційно названий transitional полями. Це поля, які передували пізнішим еквівалентам полів Open XML, але залишаються дійсними всередині .docx документів, відкритих з застарілих джерел. Кожен перехідний тип поля має власний строго типізований клас, що успадковується від 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, яку ви надаєте.

Поширені проблеми

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

FAQ

Що означає «transitional» для цих типів полів?

Це не офіційна термінологія Word — вона групує класи полів у просторі імен Aspose.Words.Fields цього випуску, які реалізують старі коди полів (штрих-код і поля сумісності до Open-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

Дивіться також

 Українська