Nahradit pole statickým textem

Výměna polí je často nutná, pokud chcete uložit svůj dokument jako statickou kopii. Například při zasílání jako příloha v e-mailu. Převodní pole jako například 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 nahradit 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
  • kód pole 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

update-remove-a-field-aspose-words

Struktura je také vidět níže v hierarchické podobě pomocí demo projektu “DocumentExplorer”, které lodě s Aspose.Words Instalátor.

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

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í jsou opakovány 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í jakýkoliv 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:

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

Převést některé typy polí do konkrétních částí dokumentu

Od ConvertFieldsToStaticText metoda akceptuje dva parametry CompositeNode vlastnosti a FieldType enumitation, je možné předat jakýkoli kompozitní uzel této metody. To umožňuje převést pole na statický text pouze ve specifický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.

The FieldType počet předán na 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-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();
}
}
}
}

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

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

Následující příklad kódu ukazuje, jak převést všechny IF pole v posledním odstavci statického textu:

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