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
Struktura można również zobaczyć poniżej w formie hierarchicznej za pomocą projektu demo “DocumentExplorer”, które statki z Aspose.Words Instalator.
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"); |