Zastąp pola tekstem statycznym

Zastąpienie pól jest często wymagane, gdy chcesz zapisać swój dokument jako kopię statyczną. Na przykład, wysyłając jako załącznik w e- mailu. Konwersja pól, takich jak DATE lub TIME tekst statyczny pozwoli dokumentowi na wyświetlenie tej samej daty co w momencie wysłania dokumentu. Ponadto, w niektórych sytuacjach, może wymagać usunięcia warunkowego IF pola z dokumentu i zastąpić je najnowszym wynikiem tekstu zamiast. Na przykład, konwersji wyniku IF pole do tekstu statycznego, więc nie będzie już dynamicznie zmieniać jego wartości podczas aktualizacji pól w dokumencie.

Poniższy schemat pokazuje jak IF pole jest przechowywane w dokumencie:

  • tekst jest otoczony przez specjalne węzły pola - FieldStart oraz FieldEnd
  • FieldSeparator węzeł oddziela tekst w polu od kodu pola i wyniku pola
  • kod pola definiuje ogólne zachowanie pola, podczas gdy wynik pola zachowuje ostatni wynik, gdy pole jest aktualizowane przy użyciu Microsoft Word lub Aspose.Words
  • wynik pola jest zapisany w polu i wyświetlany w dokumencie po obejrzeniu

update-remove-a-field-aspose-words

Struktura można również zobaczyć poniżej w formie hierarchicznej za pomocą projektu demo “DocumentExplorer”, które statki z Aspose.Words Instalator.

update-remove-a-field-aspose-words-2

Pola, których nie można zastąpić tekstem

Zastąpienie pola tekstem statycznym nie działa prawidłowo dla niektórych pól nagłówkiem lub stopką.

Na przykład, próbuje przekonwertować PAGE pole w nagłówku lub stopce do tekstu statycznego spowoduje wyświetlenie tej samej wartości na wszystkich stronach. Dzieje się tak dlatego, że nagłówki i stopki są powtarzane na wielu stronach, a kiedy pozostają jako pola, są obsługiwane szczególnie tak, że wyświetlają prawidłowy wynik dla każdej strony.

Jednak w nagłówku, PAGE pole przekłada się dobrze na statyczny bieg tekstu. Ten bieg tekstu będzie oceniony tak, jakby to była ostatnia strona w sekcji, która spowoduje jakiekolwiek PAGE pole w nagłówku, aby 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-Java
Document doc = new Document(getMyDir() + "Linked fields.docx");
doc.unlinkFields();

Przelicz niektóre typy pól w poszczególnych częściach dokumentu

Od czasu ConvertFieldsToStaticText metoda akceptuje dwa parametry - CompositeNode właściwości i FieldType wyliczenie, możliwe jest przekazanie dowolnego złożonego węzła do tej metody. Pozwala to na konwersję pól na tekst statyczny tylko w określonych częściach dokumentu.

Na przykład, można przejść Document obiekt i konwertować pola określonego typu z całego dokumentu do tekstu statycznego, lub można przekazać Body obiekt sekcji i tylko konwertować pola znalezione w tym ciele.

W FieldType liczba przekazana do ConvertFieldsToStaticText metoda określa rodzaj pól, które 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-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();
}
}
}
}

Poniższy przykład kodu pokazuje jak przekonwertować wszystkie IF pola w dokumencie do tekstu statycznego:

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

Poniższy przykład kodu pokazuje jak przekonwertować wszystkie PAGE pola w części dokumentu do tekstu statycznego:

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

Poniższy przykład kodu pokazuje jak przekonwertować wszystkie IF pola w ostatnim akapicie do tekstu statycznego:

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