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

Замяната на полета често се изисква, когато искате да запазите документа си като статично копие. Например, когато изпращате като прикачен файл в имейл. Конвертиране на полета като DATE или TIME към статичен текст ще позволи на документа да показва същата дата, както когато е изпратен. Също така, в някои ситуации, може да се наложи да премахнете условното IF полета от вашия документ и да ги замени с най-скорошния текстов резултат вместо това. Например, конвертиране на резултата от IF поле към статичен текст, така че вече няма да променя динамично стойността си, когато се актуализират полетата в документа.

Диаграмата по- долу показва как IF полето се съхранява в документ:

  • текстът е заобиколен от специалните полеви възли FieldStart както и FieldEnd
  • FieldSeparator Възел разделя текста в полето в полевия код и резултата от полето
  • кодът на полето определя общото поведение на полето, докато резултатът на полето запазва най-скорошния резултат, когато това поле се актуализира, използвайки Microsoft Word или Aspose.Words
  • резултатът от полето е това, което се съхранява в полето и се показва в документа, когато се разглежда

update-remove-a-field-aspose-words

Структурата също може да се види по- долу в йерархична форма с помощта на демо проект “Експлорер”.

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");