Замените поля статичным текстом

Замена полей часто требуется, когда вы хотите сохранить документ в виде статической копии. Например, при отправке в качестве вложения в электронном письме. Преобразование таких полей, как DATE или TIME, в статический текст позволит отображать в документе ту же дату, что и при отправке. Кроме того, в некоторых ситуациях вам может потребоваться удалить условные поля IF из вашего документа и заменить их самым последним текстовым результатом. Например, преобразуем результат работы поля IF в статический текст, чтобы оно больше не меняло свое значение динамически при обновлении полей в документе.

На приведенной ниже диаграмме показано, как поле IF сохраняется в документе:

  • текст окружен специальными узлами полей – FieldStart и FieldEnd
  • узел FieldSeparator разделяет текст внутри поля на код поля и результат поля
  • код поля определяет общее поведение поля, в то время как результат по полю сохраняет самый последний результат при обновлении этого поля с помощью Microsoft Word или Aspose.Words
  • результат работы с полем - это то, что хранится в поле и отображается в документе при просмотре

update-remove-a-field-aspose-words

Структуру также можно увидеть ниже в иерархической форме, используя демонстрационный проект “DocumentExplorer”, который поставляется вместе с установщиком Aspose.Words.

update-remove-a-field-aspose-words-2

Поля, которые не могут быть заменены текстом

Замена поля статическим текстом не работает должным образом для некоторых полей в верхнем или нижнем колонтитуле.

Например, попытка преобразовать поле PAGE в верхнем или нижнем колонтитуле в статический текст приведет к отображению одного и того же значения на всех страницах. Это связано с тем, что верхние и нижние колонтитулы повторяются на нескольких страницах, и когда они остаются в виде полей, они обрабатываются особым образом, чтобы отображать правильный результат для каждой страницы.

Однако в заголовке поле PAGE хорошо преобразуется в статический фрагмент текста. Этот фрагмент текста будет оцениваться так, как если бы он был последней страницей в разделе, что приведет к отображению любого поля PAGE в заголовке как последней страницы на всех страницах.

В следующем примере кода показано, как заменить поле самым последним результатом:

Преобразование определенных типов полей в определенных частях документа

Поскольку метод ConvertFieldsToStaticText принимает два параметра – свойства CompositeNode и перечисление FieldType, этому методу можно передать любой составной узел. Это позволяет преобразовывать поля в статический текст только в определенных частях документа.

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

Перечисление FieldType, передаваемое методу ConvertFieldsToStaticText, указывает, какой тип полей следует преобразовать в статический текст. Любой другой тип полей, найденный в документе, останется неизменным.

В следующем примере кода показано, как выбрать поля определенного типа – targetFieldType в определенном узле – compositeNode и затем преобразовать их в статический текст:

В следующем примере кода показано, как преобразовать все поля IF в документе в статический текст:

В следующем примере кода показано, как преобразовать все поля PAGE в тексте документа в статический текст:

В следующем примере кода показано, как преобразовать все поля IF в последнем абзаце в статический текст: