Замяна на полета със статичен текст
Замяната на полета често се изисква, когато искате да запазите документа си като статично копие. Например, когато изпращате като прикачен файл в имейл. Конвертиране на полета като DATE
или TIME
към статичния текст ще позволи на документа да показва същата дата, както при изпращането му. Също така, в някои ситуации може да се наложи да премахнете условността IF
полета от вашия документ и да ги замени с най-скорошен текстов резултат вместо. Например, конвертиране на резултата от IF
поле към статичен текст, така че вече няма да променя динамично стойността си, когато се актуализират полетата в документа.
Диаграмата по- долу показва как IF
полето се съхранява в документ:
- текстът е заобиколен от специални полеви възли FieldStart както и FieldEnd
- FieldSeparator Възел разделя текста в полето в полевия код и резултата от полето
- кодът на полето определя общото поведение на полето, докато резултатът на полето запазва най-скорошния резултат, когато това поле се актуализира, използвайки Microsoft Word или Aspose.Words
- резултатът от полето е това, което се съхранява в полето и показва в документа, когато се разглежда
Структурата може да се види и в йерархична форма, използвайки демо проекта “DocumentExplorer”, кои кораби с Aspose.Words инсталатор.
Полета, които не могат да бъдат заменени с текст
Замяна на поле със статичен текст не работи правилно за някои полета в заглавна част или стъпало.
Например, опитвайки се да конвертирате PAGE
полето в заглавна част или стъпало към статичния текст ще доведе до същата стойност, която се показва на всички страници. Това е така, защото заглавните части и стъпалата се повтарят на няколко страници и когато останат като полета, те се обработват особено, така че те показват правилния резултат за всяка страница.
Обаче, в заглавната част, PAGE
полето се превежда добре в статично движение на текст. Този текст ще бъде оценен сякаш е последната страница в раздела, която ще предизвика PAGE
поле в заглавната част за показване на последната страница на всички страници.
Следният пример за код показва как да замените полето с последния си резултат:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(getMyDir() + "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-Java | |
private static class FieldsHelper extends DocumentVisitor { | |
/** | |
* Converts any fields of the specified type found in the descendants of the node into static text. | |
* | |
* @param compositeNode The node in which all descendants of the specified FieldType will be converted to static text. | |
* @param targetFieldType The FieldType of the field to convert to static text. | |
*/ | |
public static void convertFieldsToStaticText(CompositeNode compositeNode, int targetFieldType) throws Exception { | |
for (Field field : compositeNode.getRange().getFields()) | |
{ | |
if (field.getType() == targetFieldType) | |
{ | |
field.unlink(); | |
} | |
} | |
} | |
} |
Следният пример за код показва как да конвертирате всички IF
полета в документ за статичен текст:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(getMyDir() + "Linked fields.docx"); | |
// Pass the appropriate parameters to convert all IF fields encountered in the document (including headers and footers) to text. | |
for (Field field : doc.getRange().getFields()) { | |
if (field.getType() == FieldType.FIELD_IF) { | |
field.unlink(); | |
} | |
} | |
doc.save(getArtifactsDir() + "WorkingWithFields.ConvertFieldsInDocument.docx"); |
Следният пример за код показва как да конвертирате всички PAGE
полета в документ за статичен текст:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(getMyDir() + "Linked fields.docx"); | |
// Pass the appropriate parameters to convert PAGE fields encountered to text only in the body of the first section. | |
for (Field field : doc.getRange().getFields()) { | |
if (field.getType() == FieldType.FIELD_PAGE) { | |
field.unlink(); | |
} | |
} | |
doc.save(getArtifactsDir() + "WorkingWithFields.ConvertFieldsInBody.docx"); |
Следният пример за код показва как да конвертирате всички IF
полета в последния параграф до статичен текст:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(getMyDir() + "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 (Field field : doc.getFirstSection().getBody().getLastParagraph().getRange().getFields()) { | |
if (field.getType() == FieldType.FIELD_IF) { | |
field.unlink(); | |
} | |
} | |
doc.save(getArtifactsDir() + "WorkingWithFields.TestFile.docx"); |