Zastąp pola tekstem statycznym
Zastępowanie pól jest często wymagane, gdy chcesz zapisać dokument jako kopię statyczną. Na przykład podczas wysyłania jako załącznik w wiadomości e-mail. Konwersja pól takich jak DATE
LUB TIME
na tekst statyczny pozwoli dokumentowi wyświetlić tę samą datę, co w momencie wysłania. Ponadto w niektórych sytuacjach może być konieczne usunięcie warunkowych pól IF
z dokumentu i zastąpienie ich najnowszym wynikiem tekstowym. Na przykład konwertowanie wyniku pola IF
na tekst statyczny, aby nie zmieniało już dynamicznie swojej wartości, gdy pola w dokumencie są aktualizowane.
Poniższy diagram pokazuje, jak pole IF
jest przechowywane w dokumencie:
- tekst jest otoczony specjalnymi węzłami pól - FieldStart i FieldEnd
- węzeł FieldSeparator oddziela tekst w polu na kod pola i wynik pola
- kod pola określa ogólne zachowanie pola, podczas gdy wynik pola zachowuje najnowszy wynik, gdy to pole jest aktualizowane przy użyciu Microsoft Word LUB Aspose.Words
- wynik pola to to, co jest przechowywane w polu i wyświetlane w dokumencie podczas przeglądania
Strukturę można również zobaczyć poniżej w formie hierarchicznej przy użyciu projektu demonstracyjnego “DocumentExplorer”.
Pola, których nie można zastąpić tekstem
Zastąpienie pola tekstem statycznym nie działa poprawnie w przypadku niektórych pól w nagłówku lub stopce.
Na przykład próba konwersji pola PAGE
w nagłówku lub stopce na tekst statyczny spowoduje wyświetlenie tej samej wartości na wszystkich stronach. Dzieje się tak, ponieważ nagłówki i stopki są powtarzane na wielu stronach, a gdy pozostają jako pola, są obsługiwane szczególnie, aby wyświetlać prawidłowy wynik dla każdej strony.
Jednak w nagłówku pole PAGE
dobrze tłumaczy się na statyczny przebieg tekstu. Ten przebieg tekstu zostanie oceniony tak, jakby był ostatnią stroną w sekcji, co spowoduje, że dowolne pole PAGE
w nagłówku wyświetli ostatnią stronę na wszystkich stronach.
Poniższy przykład kodu pokazuje, jak zastąpić pole najnowszym wynikiem:
//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(); |
Konwertuj określone typy pól w określonych częściach dokumentu
Ponieważ metoda ConvertFieldsToStaticText akceptuje dwa parametry-właściwości CompositeNode i wyliczenie FieldType, możliwe jest przekazanie dowolnego węzła złożonego do tej metody. Umożliwia to konwersję pól na tekst statyczny tylko w określonych częściach dokumentu.
Na przykład możesz przekazać obiekt Document i przekonwertować pola określonego typu z całego dokumentu na tekst statyczny lub możesz przekazać obiekt Body sekcji i przekonwertować tylko pola Znalezione w tej treści.
Wyliczenie FieldType przekazane do metody ConvertFieldsToStaticText określa, jaki typ pól należy przekonwertować na tekst statyczny. Każdy inny typ pola znaleziony w dokumencie pozostanie niezmieniony.
Poniższy przykład kodu pokazuje, jak wybrać pola określonego typu – targetFieldType w określonym węźle – compositeNode, a następnie przekonwertować je na tekst statyczny:
//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(); | |
} | |
} | |
} |
Poniższy przykład kodu pokazuje, jak przekonwertować wszystkie pola IF
w dokumencie na tekst statyczny:
//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"); |
Poniższy przykład kodu pokazuje, jak przekonwertować wszystkie pola PAGE
w treści dokumentu na tekst statyczny:
//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"); |
Poniższy przykład kodu pokazuje, jak przekonwertować wszystkie pola IF
w ostatnim akapicie na tekst statyczny:
//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"); |