package com.aspose.words.examples.mail_merge;
import com.aspose.words.Document;
import com.aspose.words.DocumentBuilder;
import com.aspose.words.FieldMergingArgs;
import com.aspose.words.IFieldMergingCallback;
import com.aspose.words.ImageFieldMergingArgs;
import com.aspose.words.TextFormFieldType;
import com.aspose.words.examples.Utils;
/**
* This sample shows how to insert check boxes and text input form fields during
* mail merge into a document.
*/
public class InsertCheckBoxesOrHTMLDuringMailMerge {
private static final String dataDir = Utils.getSharedDataDir(InsertCheckBoxesOrHTMLDuringMailMerge.class) + "MailMerge/";
public static void main(String[] args) throws Exception {
execute();
}
private static void execute() throws Exception {
// Load the template document.
Document doc = new Document(dataDir + "Template.doc");
// Setup mail merge event handler to do the custom work.
doc.getMailMerge().setFieldMergingCallback(new HandleMergeField());
// This is the data for mail merge.
String[] fieldNames = new String[] { "RecipientName", "SenderName", "FaxNumber", "PhoneNumber", "Subject", "Body", "Urgent", "ForReview", "PleaseComment" };
Object[] fieldValues = new Object[] { "Josh", "Jenny", "123456789", "", "Hello", "<b>HTML Body Test message 1</b>", true, false, true };
// Execute the mail merge.
doc.getMailMerge().execute(fieldNames, fieldValues);
// Save the finished document.
doc.save(dataDir + "Template Out.doc");
}
}
class HandleMergeField implements IFieldMergingCallback {
/**
* This handler is called for every mail merge field found in the document,
* for every record found in the data source.
*/
public void fieldMerging(FieldMergingArgs e) throws Exception {
if (mBuilder == null)
mBuilder = new DocumentBuilder(e.getDocument());
// We decided that we want all boolean values to be output as check box form fields.
if (e.getFieldValue() instanceof Boolean) {
// Move the "cursor" to the current merge field.
mBuilder.moveToMergeField(e.getFieldName());
// It is nice to give names to check boxes. Lets generate a name such as MyField21 or so.
String checkBoxName = java.text.MessageFormat.format("{0}{1}", e.getFieldName(), e.getRecordIndex());
// Insert a check box.
mBuilder.insertCheckBox(checkBoxName, (Boolean) e.getFieldValue(), 0);
// Nothing else to do for this field.
return;
}
// We want to insert html during mail merge.
if ("Body".equals(e.getFieldName())) {
mBuilder.moveToMergeField(e.getFieldName());
mBuilder.insertHtml((String) e.getFieldValue());
}
// Another example, we want the Subject field to come out as text input form field.
if ("Subject".equals(e.getFieldName())) {
mBuilder.moveToMergeField(e.getFieldName());
String textInputName = java.text.MessageFormat.format("{0}{1}", e.getFieldName(), e.getRecordIndex());
mBuilder.insertTextInput(textInputName, TextFormFieldType.REGULAR, "", (String) e.getFieldValue(), 0);
}
}
public void imageFieldMerging(ImageFieldMergingArgs args) throws Exception {
// Do nothing.
}
private DocumentBuilder mBuilder;
}