Nahradit pole statickým textem
Výměna polí je často nutná, pokud chcete uložit svůj dokument jako statická kopie. Například při odesílání jako příloha v e-mailu. Převodní pole jako např. DATE
nebo TIME
ke statickému textu umožní dokument zobrazit stejné datum, jako když byl odeslán. Také v některých situacích, můžete potřebovat odstranit podmíněné IF
pole z vašeho dokumentu a místo toho je nahradíte nejnovějším textovým výsledkem. Například, převést výsledek IF
pole statického textu, takže již nebude dynamicky měnit svou hodnotu při aktualizaci polí v dokumentu.
Následující schéma ukazuje, jak IF
pole je skladováno v dokumentu:
- text je obklopen speciálními polními uzly FieldStart a FieldEnd
- FieldSeparator Uzel odděluje text uvnitř pole do kódu pole a výsledku pole
- pole kód definuje obecné chování pole, zatímco výsledek pole si zachovává nejnovější výsledek, když je toto pole aktualizováno pomocí Microsoft Word nebo Aspose.Words
- výsledek pole je uložen v poli a zobrazen v dokumentu při pohledu
Struktura lze také vidět níže v hierarchické podobě pomocí demo projekt DocumentExplorer.
Pole, která nelze nahradit textem
Výměna pole statickým textem nefunguje správně pro některá pole v hlavičce nebo zápatí.
Například, snaží převést PAGE
pole v hlavičce nebo zápatí statického textu povede ke stejné hodnotě zobrazené na všech stránkách. To je proto, že hlavičky a zápatí se opakují přes více stran, a když zůstávají jako pole, jsou manipulovány zejména tak, aby zobrazovaly správný výsledek pro každou stránku.
Nicméně, v záhlaví, PAGE
pole překládá dobře na statický průběh textu. Tento průběh textu bude vyhodnocen jako poslední stránka v sekci, která způsobí PAGE
pole v záhlaví zobrazí poslední stránku na všech stránkách.
Následující příklad kódu ukazuje, jak nahradit pole jeho nejnovějším výsledkem:
PŘÍKLAD
Převést některé typy polí do konkrétních částí dokumentu
Od ConvertFieldsToStaticText metoda přijímá dva parametry CompositeNode vlastnosti a FieldType vyjmenování, je možné předat jakýkoli kompozitní uzel této metodě. To umožňuje převést pole na statický text pouze v určitých částech dokumentu.
Například, můžete projít Document objekt a převést pole daného typu z celého dokumentu do statického textu, nebo můžete projít Body objekt sekce a pouze převést pole nalezená v tomto těle.
• FieldType počet předán ConvertFieldsToStaticText metoda určuje, jaký typ polí by měl být převeden na statický text. Jakýkoli jiný druh pole nalezený v dokumentu zůstane nezměněn.
Následující příklad kódu ukazuje, jak vybrat pole určitého typu targetFieldType ve specifickém uzlu; compositeNode a pak je převést na statický text:
// 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()); | |
} | |
} |
Následující příklad kódu ukazuje, jak převést všechny IF
pole v dokumentu ke statickému textu:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "Linked fields.docx") | |
# Pass the appropriate parameters to convert all IF fields encountered in the document (including headers and footers) to text. | |
for f in doc.range.fields : | |
if f.type == aw.fields.FieldType.FIELD_IF : | |
f.unlink() | |
# Save the document with fields transformed to disk | |
doc.save(docs_base.artifacts_dir + "WorkingWithFields.convert_fields_in_document.docx") |
Následující příklad kódu ukazuje, jak převést všechny PAGE
pole v těle dokumentu ke statickému textu:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "Linked fields.docx") | |
# Pass the appropriate parameters to convert PAGE fields encountered to text only in the body of the first section. | |
for f in doc.first_section.body.range.fields : | |
if f.type == aw.fields.FieldType.FIELD_PAGE : | |
f.unlink() | |
doc.save(docs_base.artifacts_dir + "WorkingWithFields.convert_fields_in_body.docx") |
Následující příklad kódu ukazuje, jak převést všechny IF
pole v posledním odstavci pro statický text:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "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 f in doc.first_section.body.last_paragraph.range.fields : | |
if f.type == aw.fields.FieldType.FIELD_IF : | |
f.unlink() | |
doc.save(docs_base.artifacts_dir + "WorkingWithFields.test_file.docx") |