Замените поля статичным текстом
Замена полей часто требуется, когда вы хотите сохранить документ в виде статической копии. Например, при отправке в качестве вложения в электронном письме. Преобразование таких полей, как DATE
или TIME
, в статический текст позволит отображать в документе ту же дату, что и при отправке. Кроме того, в некоторых ситуациях вам может потребоваться удалить условные поля IF
из вашего документа и заменить их самым последним текстовым результатом. Например, преобразуем результат работы поля IF
в статический текст, чтобы оно больше не изменяло свое значение динамически при обновлении полей в документе.
На приведенной ниже диаграмме показано, как поле IF
сохраняется в документе:
- текст окружен специальными узлами полей – FieldStart и FieldEnd
- узел FieldSeparator разделяет текст внутри поля на код поля и результат поля
- код поля определяет общее поведение поля, в то время как результат по полю сохраняет самый последний результат при обновлении этого поля с помощью Microsoft Word или Aspose.Words
- результат работы с полем - это то, что хранится в поле и отображается в документе при просмотре
Структуру также можно увидеть ниже в иерархической форме, используя демонстрационный проект “DocumentExplorer”..
Поля, которые не могут быть заменены текстом
Замена поля статическим текстом не работает должным образом для некоторых полей в верхнем или нижнем колонтитуле.
Например, попытка преобразовать поле PAGE
в верхнем или нижнем колонтитуле в статический текст приведет к отображению одного и того же значения на всех страницах. Это связано с тем, что верхние и нижние колонтитулы повторяются на нескольких страницах, и когда они остаются в виде полей, они обрабатываются особым образом, чтобы отображать правильный результат для каждой страницы.
Однако в заголовке поле PAGE
хорошо преобразуется в статический фрагмент текста. Этот фрагмент текста будет оцениваться так, как если бы он был последней страницей в разделе, что приведет к отображению любого поля PAGE
в заголовке как последней страницы на всех страницах.
В следующем примере кода показано, как заменить поле самым последним результатом:
EXAMPLE
Преобразование определенных типов полей в определенных частях документа
Поскольку метод ConvertFieldsToStaticText принимает два параметра – свойства CompositeNode и перечисление FieldType, этому методу можно передать любой составной узел. Это позволяет преобразовывать поля в статический текст только в определенных частях документа.
Например, вы можете передать объект Document и преобразовать поля указанного типа из всего документа в статический текст, или вы можете передать объект Body раздела и преобразовать только поля, найденные в этом тексте.
Перечисление FieldType, передаваемое методу ConvertFieldsToStaticText, указывает, какой тип полей следует преобразовать в статический текст. Любой другой тип полей, найденный в документе, останется неизменным.
В следующем примере кода показано, как выбрать поля определенного типа – targetFieldType в определенном узле – compositeNode и затем преобразовать их в статический текст:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
public class FieldsHelper | |
{ | |
/// <summary> | |
/// Converts any fields of the specified type found in the descendants of the node into static text. | |
/// </summary> | |
/// <param name="compositeNode">The node in which all descendants of the specified FieldType will be converted to static text.</param> | |
/// <param name="targetFieldType">The FieldType of the field to convert to static text.</param> | |
public static void ConvertFieldsToStaticText(CompositeNode compositeNode, FieldType targetFieldType) | |
{ | |
compositeNode.Range.Fields.Cast<Field>().Where(f => f.Type == targetFieldType).ToList().ForEach(f => f.Unlink()); | |
} | |
} |
В следующем примере кода показано, как преобразовать все поля IF
в документе в статический текст:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "Linked fields.docx") | |
# Pass the appropriate parameters to convert all IF fields encountered in the document (including headers and footers) to text. | |
for f in doc.range.fields : | |
if f.type == aw.fields.FieldType.FIELD_IF : | |
f.unlink() | |
# Save the document with fields transformed to disk | |
doc.save(docs_base.artifacts_dir + "WorkingWithFields.convert_fields_in_document.docx") |
В следующем примере кода показано, как преобразовать все поля PAGE
в тексте документа в статический текст:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "Linked fields.docx") | |
# Pass the appropriate parameters to convert PAGE fields encountered to text only in the body of the first section. | |
for f in doc.first_section.body.range.fields : | |
if f.type == aw.fields.FieldType.FIELD_PAGE : | |
f.unlink() | |
doc.save(docs_base.artifacts_dir + "WorkingWithFields.convert_fields_in_body.docx") |
В следующем примере кода показано, как преобразовать все поля IF
в последнем абзаце в статический текст:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "Linked fields.docx") | |
# Pass the appropriate parameters to convert all IF fields to text that are encountered only in the last | |
# paragraph of the document. | |
for f in doc.first_section.body.last_paragraph.range.fields : | |
if f.type == aw.fields.FieldType.FIELD_IF : | |
f.unlink() | |
doc.save(docs_base.artifacts_dir + "WorkingWithFields.test_file.docx") |