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

Перезавантаження полів часто необхідно при бажанні зберегти ваш документ як статичну копію. Наприклад, при надсиланні в електронному вигляді на електронну пошту. Перетворення полів, таких як DATE або TIME до статичного тексту дозволить документу відображати однакову дату, коли він був відправлений. Також в деяких ситуаціях можна видалити умовний режим IF поля з вашого документа і замініть їх за допомогою останнього текстового результату. Наприклад, перетворення результату IF поле до статичного тексту, так що він не буде динамічно змінювати його значення, коли поля в документі оновлюються.

Схема нижче показує, як показано IF поле зберігається в документі:

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

update-remove-a-field-aspose-words

Структура також може бути показано нижче в ієрархічному вигляді за допомогою ієрархічної форми демо-проект * “ДокументExplorer”*.

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

Поля, які не можуть бути замінені на текст

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

Наприклад, намагаючись перетворити 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 об’єкт розділу і тільки перетворюйте поля, знайдені в цьому тілі.

Про нас 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");