Введение в поля

Aspose.Words библиотека классов, предназначенная для серверной обработки Microsoft Word документирует и поддерживает поля следующими способами:

  • Все поля в документе сохраняются во время открытого/сохранения и конверсии
  • возможно обновление результатов большинства полей

В этой статье мы узнаем больше о структуре поля, полях, поддерживаемых в Aspose.Words, Подробности работы с такими полями.

Полевая структура

Поле состоит из:

  • Узлы запуска поля и разделителя используются для охвата контента, который составляет код поля (обычно в виде простого текста).
  • Разделитель поля и конец поля охватывают результат поля. Это может быть составлено из различных типов контента, начиная от прогонов текста до абзацев и таблиц.
  • Некоторые поля могут не иметь разделителя, что означает, что весь контент составляет код поля.
  • Код поля определяет поведение поля и состоит из идентификатора поля и часто других параметров, таких как имя поля и переключатели.
  • Результаты на местах содержат самую последнюю оценку на местах. Это значение сохраняется в результате поля и является тем, что отображается пользователю. Некоторые поля могут не иметь какого-либо результата поля, поэтому в документе ничего не будет отображаться. Кроме того, некоторые поля могут не обновляться, поэтому также не будут иметь результата поля.

fields-aspose-words-java

Содержимое, которое составляет код поля, хранится как Run узлы между ними FieldStart и FieldSeparator. Результат поля хранится между FieldSeparator и FieldEnd Узлы могут состоять из различных типов контента. Обычно результат поля содержит только текст, состоящий из узлов Run, однако узел FieldEnd может быть расположен в совершенно другом абзаце и, таким образом, делает результат поля, состоящий из Логические уровни узлов в документе такие как Table и Paragraph Узлы тоже.

Вот взгляд на то, как поле хранится в Aspose.Words используя пример “Исследователь документов”, который можно найти на Github.

document-explorer-aspose-words-java

Поля в Aspose.Words Document Object Model ()DOM)

Когда документ загружается в <span notrans="<span notrans=" Aspose.Words"="">"> Поля документа загружаются в Aspose.Words Document Object Model как набор отдельных компонентов (узлов). Одно поле загружается как коллекция FieldStart, FieldSeparator и FieldEnd Узлы вместе с содержимым между этими узлами. Если поле не имеет результата поля, то не будет FieldSeparator Узел. Все эти узлы всегда находятся в ряде (как у детей). Paragraph или SmartTag.

В Aspose.Words Каждый из них FieldXXX Узлы происходят от FieldChar. Этот класс предоставляет свойство проверять тип поля, представленного указанным узлом через FieldType собственность. Например, FieldType.FieldMergeField представляет собой поле слияния в документе.

Поддерживаемые поля

Расчет следующих полей поддерживается в текущей версии Aspose.Words:

  • = (формула)
  • ADDRESSBLOCK
  • ASK
  • AUTHOR
  • AUTONUM
  • AUTONUMLGL
  • AUTONUMOUT
  • AUTOTEXT
  • BARCODE
  • COMMENTS
  • COMPARE
  • CREATEDATE
  • DATABASE
  • DATE
  • DISPLAYBARCODE
  • DOCPROPERTY
  • DOCVARIABLE
  • EDITTIME
  • EQ
  • FILENAME
  • FILESIZE
  • FILLIN
  • FORMCHECKBOX
  • FORMDROPDOWN
  • FORMTEXT
  • GLOSSARY
  • GOTOBUTTON
  • GREETINGLINE
  • HYPERLINK
  • IF
  • IMPORT
  • INCLUDE
  • INCLUDEPICTURE
  • INCLUDETEXT
  • INDEX
  • INFO
  • KEYWORDS
  • LASTSAVEDBY
  • LISTNUM
  • MACROBUTTON
  • MERGEBARCODE
  • MERGEFIELD
  • MERGEREC
  • MERGESEQ
  • NEXT
  • NEXTIF
  • NOTEREF
  • NUMCHARS
  • NUMPAGES
  • NUMWORDS
  • PAGE
  • PAGEREF
  • PRINTDATE
  • QUOTE
  • REF
  • REVNUM
  • SAVEDATE
  • SECTION
  • SECTIONPAGES
  • SEQ
  • SET
  • SHAPE
  • SKIPIF
  • STYLEREF
  • SUBJECT
  • SYMBOL
  • TEMPLATE
  • TIME
  • TITLE
  • TOA
  • TOC (включая TOT и TOF)
  • USERADDRESS
  • USERINITIALS
  • USERNAME

Сложный полевой парсинг

Aspose.Words Следуйте по пути Microsoft Word обрабатывает поля и в результате правильно обрабатывает:

  • вложенные поля: IF { =OR({ COMПАРЕ { =2.5 +PRODUCT(3,5 ,8.4) } > 4}, { =2/2 }) } = 1 "Credit not acceptable" "Credit acceptable"
  • полевой аргумент может быть результатом вложенного поля
  • поля могут быть вложены в код поля, а также в результат поля
  • Пространства/нет пространств, цитаты/нет цитат, побег персонажей в полях и т.д MERGEFIELD \f"Text after""Field \n\ame with \" and \\\ and \\\*"\bTextBefor\e
  • поля, которые охватывают несколько абзацев

Формула поля

Aspose.Words обеспечивает очень серьезную реализацию формулы двигателя и поддерживает следующее:

  • арифметические и логические операторы: =(54+4*(6-77)-(5))+(-6-5)/4/5
  • функции: =ABS(-01.4)+2.645/(5.6^3.5)+776457 \\\# "#,##0"
  • ссылки на закладки: =IF(C>4, 5,ABS(A)*.76) +3.85
  • выключатели форматирования номеров: =00000000 \\\# "$#,##0.00;($#,##0.00)"

Поддерживаются следующие функции в выражениях: ABS, AND, AVERAGE, COUNT, DEFINED, FALSE, IF, INT, MAX, MIN, MOD, NOT, OR, PRODUCT, ROUND, SIGN, SUM, TRUE.

IF и COMPARE Поля

Только некоторые из них IF Выражения, которые Aspose.Words Вы можете легко рассчитать, чтобы дать вам представление о том, насколько мощна эта функция:

  • IF 3 > 5.7^4+MAX(4,3) True False
  • IF "abcd" > "abc" True False
  • IF "?ab*" = "1abdsg" True False
  • IF 4 = "2*2" True False
  • COMPARE 3+5/34 < 4.6/3/2

DATE и TIME Поля

Aspose.Words поддерживает все переключатели форматирования даты и времени, доступные в Microsoft Word, Вот несколько примеров:

  • DATE @ "d-MMM-yy"
  • DATE @ "d/MM/yyyy h:mm am/pm

Mail Merge Поля

Aspose.Words не накладывает никаких ограничений на сложность mail merge Поля в ваших документах и поддержка вложенных IF поле формулы и может даже вычислить имя поля слияния, используя формулу.

Некоторые примеры mail merge Поля, которые Aspose.Words поддерживает:

  • Mail merge переключатели полей: MERGEFIELD FirstName \\\\\\\\* FirstCap \b "Mr. "
  • вложенные поля слияния в формуле: IF { МергефельдValue1 } >= {Мергефельд Value2 } True False
  • вычислить название поля слияния во время выполнения: MERGEFIELD { если{МергефельдValue1 } >= {Мергефельд Value2 } FirstName"LastName" }
  • условный переход к следующей записи в источнике данных: NEXTIF { МергефельдValue1 } <= { =IF(-2.45 >= 6*{Мергефельд Value2 }, 2, -.45) }

Коммутаторы форматов

Поле в документе может иметь переключатели форматирования, которые определяют, как следует форматировать полученное значение. Aspose.Words Поддерживает следующие переключатели формата:

  • @ - форматирование даты и времени
  • \# - форматирование номеров
  • \\\\ Капс
  • \\\\\\\\\\\\\\
  • \\\\ ниже
  • \\\\ Верхний
  • \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
  • MERGEFORMAT - результат форматирования в соответствии с форматированием старого результата

Date Форматирование чисел в полях

Когда Aspose.Words Вычисляет результат поля, ему часто нужно разобрать строку на число или значение даты, а также отформатировать ее обратно в строку. По умолчанию Aspose.Words использует текущую культуру потоков для выполнения анализа и форматирования при расчете значений поля во время обновления поля и mail merge. Существуют также варианты, предоставляемые в виде FieldOptions класс, который позволяет дополнительно контролировать, какая культура используется во время обновления поля

  • по умолчанию FieldUpdateCultureSource имущество устанавливается CurrentThread форматирует поля с использованием текущей культуры потоков
  • Это свойство может быть установлено FieldCode Таким образом, язык, заданный из полевого кода поля, используется для форматирования

Форматирование с использованием культуры текущей нити

Чтобы контролировать культуру, используемую при расчете поля, просто установите CurrentCulture собственность на выбранную вами культуру, прежде чем прибегать к расчетам полей.

Следующий пример кода показывает, как изменить культуру, используемую в полях форматирования во время обновления:

Пример (используйте общедоступную обертку CurrentThreadSettings.getLocale() и setLocale() вместо частной) Thread.CurrentThread.CurrentCulture

Использование текущей культуры для форматирования полей позволяет системе легко и последовательно контролировать форматирование всех полей в документе во время обновления поля.

Форматирование с использованием культуры в документе

С другой стороны, Microsoft Word форматирует каждое отдельное поле на основе языка текста, найденного в поле (в частности, выполняется из кода поля). Иногда во время обновления поля это может быть желаемым поведением, например, если у вас есть глобализированные документы, содержащие контент, состоящий из множества разных языков, и вы хотите, чтобы каждое поле соответствовало используемому из текста. Aspose.Words Также поддерживается эта функциональность.

The Document Класс обеспечивает FieldOptions свойство, содержащее элементы, которые могут быть использованы для контроля обновления полей в документе.

Следующий пример кода показывает, как указать, где культура, используемая для форматирования даты во время обновления поля, и mail merge Выбирается из:

Пример