Як працювати з перехідними полями у .NET

Як працювати з перехідними полями у .NET

Як працювати з переходовими полями у .NET

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

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 при приведенні Field до класу транзиторного поля. Неправильний FieldType було передбачено. Перевірте Field.Type проти відповідного FieldType константи перед casting.

A DISPLAYBARCODE/MERGEBARCODE властивості поля відсутні після casting. Поле було cast to FieldBarcode замість FieldDisplayBarcode/FieldMergeBarcode (або навпаки) — ці класи надають різні набори властивостей, хоча всі три представляють дані штрих-коду. Підтвердіть Field.Type перед кастуванням.

Поля штрих-коду містять дані, але зображення не відображається. Ні IBarcodeGenerator реалізація була надана. Надати власний генератор, що реалізує GetBarcodeImage(parameters) — ця редакція не включає вбудований движок рендерингу штрих-кодів.

FieldEQ.AsOfficeMath() повертає неочікувані результати. Поле не містить дійсної інструкції рівняння. Перевірте поле 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).


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

 Українська