package com.aspose.words.examples.programming_documents.tableofcontents;
import java.util.regex.Pattern;
import com.aspose.words.Document;
import com.aspose.words.DocumentBuilder;
import com.aspose.words.IReplacingCallback;
import com.aspose.words.ReplaceAction;
import com.aspose.words.ReplacingArgs;
public class FindAndInsertATCField {
public static void main(String[] args) throws Exception {
Document doc = new Document();
// Insert a TC field which displays "Chapter 1" just before the text "The Beginning" in the document.
doc.getRange().replace(Pattern.compile("The Beginning"), new InsertTCFieldHandler("Chapter 1", "\\l 1"), false);
}
}
class InsertTCFieldHandler implements IReplacingCallback {
// Store the text and switches to be used for the TC fields.
private String mFieldText;
private String mFieldSwitches;
/**
* The switches to use for each TC field. Can be an empty string or null.
*/
public InsertTCFieldHandler(String switches) throws Exception {
this(null, switches);
}
/**
* The display text and the switches to use for each TC field. Display text
* Can be an empty string or null.
*/
public InsertTCFieldHandler(String text, String switches) throws Exception {
mFieldText = text;
mFieldSwitches = switches;
}
public int replacing(ReplacingArgs args) throws Exception {
// Create a builder to insert the field.
DocumentBuilder builder = new DocumentBuilder((Document) args.getMatchNode().getDocument());
// Move to the first node of the match.
builder.moveTo(args.getMatchNode());
// If the user specified text to be used in the field as display text then use that, otherwise use the
// match string as the display text.
String insertText;
if (!(mFieldText == null || "".equals(mFieldText)))
insertText = mFieldText;
else
insertText = args.getMatch().group();
// Insert the TC field before this node using the specified string as the display text and user defined switches.
builder.insertField(java.text.MessageFormat.format("TC \"{0}\" {1}", insertText, mFieldSwitches));
// We have done what we want so skip replacement.
return ReplaceAction.SKIP;
}
}