Замените поля статичным текстом
Замена полей часто требуется, когда вы хотите сохранить документ в виде статической копии. Например, при отправке в качестве вложения в электронное письмо. Преобразование полей, таких как DATE
или TIME
Статический текст позволяет отображать ту же дату, что и при отправке. Кроме того, в некоторых ситуациях вам может потребоваться удалить условное IF
Поля из вашего документа и заменить их с последним результатом текста. Например, преобразование результата IF
От поля к статическому тексту, так что он больше не будет динамически изменять свое значение при обновлении полей в документе.
Диаграмма ниже показывает, как IF
Поле хранится в документе:
- текст окружен специальными полевыми узлами - FieldStart и FieldEnd
- FieldSeparator Узел разделяет текст в поле на код поля и результат поля
- код поля определяет общее поведение поля, в то время как результат поля сохраняет самый последний результат при обновлении этого поля с использованием Microsoft Word или Aspose.Words
- Результат поля - это то, что хранится в поле и отображается в документе при просмотре
Структуру также можно увидеть ниже в иерархической форме. демонстрационный проект * “Исследователь документов”*.
Поля, которые нельзя заменить текстом
Замена поля статичным текстом не работает должным образом для некоторых полей в заголовке или футере.
Например, пытаясь преобразовать PAGE
поле в заголовке или футере к статическому тексту приведет к тому, что одинаковое значение будет отображаться на всех страницах. Это связано с тем, что заголовки и нижние колонтитулы повторяются на нескольких страницах, и когда они остаются в виде полей, они обрабатываются, особенно когда они отображают правильный результат для каждой страницы.
Однако в заголовке, PAGE
Поле хорошо переводится в статический поток текста. Этот прогон текста будет оцениваться так, как если бы он был последней страницей в разделе, что приведет к тому, что любой PAGE
поле в заголовке для отображения последней страницы на всех страницах.
Следующий пример кода показывает, как заменить поле с его последним результатом:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(MyDir + "Various fields.docx"); | |
doc.UnlinkFields(); |
Преобразование определенных типов полей в конкретные части документов
С тех пор ConvertFieldsToStaticText Метод принимает два параметра – CompositeNode свойств и их FieldType Перечисляя, можно передать любой композитный узел этому способу. Это позволяет конвертировать поля в статический текст только в определенных частях документа.
Например, вы можете пройти Document объект и преобразовать поля указанного типа из всего документа в статический текст, либо можно пройти Body объект сечения и преобразует только поля, находящиеся в этом теле.
The 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-.NET | |
Document doc = new Document(MyDir + "Linked fields.docx"); | |
// Pass the appropriate parameters to convert all IF fields encountered in the document (including headers and footers) to text. | |
doc.Range.Fields.Where(f => f.Type == FieldType.FieldIf).ToList().ForEach(f => f.Unlink()); | |
// Save the document with fields transformed to disk | |
doc.Save(ArtifactsDir + "WorkingWithFields.ConvertFieldsInDocument.docx"); |
Следующий пример показывает, как конвертировать все PAGE
поля в теле документа к статическому тексту:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(MyDir + "Linked fields.docx"); | |
// Pass the appropriate parameters to convert PAGE fields encountered to text only in the body of the first section. | |
doc.FirstSection.Body.Range.Fields.Where(f => f.Type == FieldType.FieldPage).ToList().ForEach(f => f.Unlink()); | |
doc.Save(ArtifactsDir + "WorkingWithFields.ConvertFieldsInBody.docx"); |
Следующий пример показывает, как конвертировать все IF
поля в последнем абзаце к статическому тексту:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(MyDir + "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. | |
doc.FirstSection.Body.LastParagraph.Range.Fields.Where(f => f.Type == FieldType.FieldIf).ToList() | |
.ForEach(f => f.Unlink()); | |
doc.Save(ArtifactsDir + "WorkingWithFields.TestFile.docx"); |