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

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

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

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

update-remove-a-field-aspose-words

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

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-C
auto doc = MakeObject<Document>(MyDir + u"Linked 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-C
void ConvertFieldsToStaticText(System::SharedPtr<CompositeNode> compositeNode, FieldType targetFieldType)
{
for (const auto& field : System::IterateOver(compositeNode->get_Range()->get_Fields()))
{
if (field->get_Type() == targetFieldType)
{
field->Unlink();
}
}
}

Следващият пример за код показва как да конвертирате всички IF полета в документ в статичен текст:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>(MyDir + u"Linked fields.docx");
// Pass the appropriate parameters to convert all IF fields encountered in the document (including headers and footers) to text.
doc->get_Range()
->get_Fields()
->LINQ_Where([](SharedPtr<Field> f) { return f->get_Type() == FieldType::FieldIf; })
->LINQ_ToList()
->ForEach(std::function<void(SharedPtr<Field> f)>([](SharedPtr<Field> f) { f->Unlink(); }));
doc->Save(ArtifactsDir + u"WorkingWithFields.ConvertFieldsInDocument.docx");

Следващият пример за код показва как да конвертирате всички полета PAGE в тялото на документ в статичен текст:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>(MyDir + u"Linked fields.docx");
// Pass the appropriate parameters to convert all IF fields encountered in the document (including headers and footers) to text.
doc->get_Range()
->get_Fields()
->LINQ_Where([](SharedPtr<Field> f) { return f->get_Type() == FieldType::FieldIf; })
->LINQ_ToList()
->ForEach(std::function<void(SharedPtr<Field> f)>([](SharedPtr<Field> f) { f->Unlink(); }));
doc->Save(ArtifactsDir + u"WorkingWithFields.ConvertFieldsInDocument.docx");

Следващият пример за код показва как да конвертирате всички полета IF в последния абзац в статичен текст:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>(MyDir + u"Linked fields.docx");
// Pass the appropriate parameters to convert all IF fields encountered in the document (including headers and footers) to text.
doc->get_Range()
->get_Fields()
->LINQ_Where([](SharedPtr<Field> f) { return f->get_Type() == FieldType::FieldIf; })
->LINQ_ToList()
->ForEach(std::function<void(SharedPtr<Field> f)>([](SharedPtr<Field> f) { f->Unlink(); }));
doc->Save(ArtifactsDir + u"WorkingWithFields.ConvertFieldsInDocument.docx");