Перехідні поля
Перехідні поля
Цей посібник показує, як працювати з типами перехідних полів — застарілими штрих-кодами та полями сумісності — у 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 |