IFieldMergingCallback
public interface IFieldMergingCallback
Implement this interface if you want to control how data is inserted into merge fields during a mail merge operation.
Examples:
Shows how to execute a mail merge with a custom callback that handles merge data in the form of HTML documents.
public void insertHtml() throws Exception {
Document doc = new Document(getMyDir() + "Field sample - MERGEFIELD.docx");
// Add a handler for the MergeField event
doc.getMailMerge().setFieldMergingCallback(new HandleMergeFieldInsertHtml());
final String htmlText = "\r\n Hello world!\r\n";
// Execute mail merge
doc.getMailMerge().execute(new String[]{"htmlField1"}, new String[]{htmlText});
// Save resulting document with a new name
doc.save(getArtifactsDir() + "MailMergeEvent.InsertHtml.docx");
}
private class HandleMergeFieldInsertHtml implements IFieldMergingCallback {
// This is called when merge field is actually merged with data in the document.
public void fieldMerging(final FieldMergingArgs args) throws Exception {
// All merge fields that expect HTML data should be marked with some prefix, e.g. 'html'
if (args.getDocumentFieldName().startsWith("html") && args.getField().getFieldCode().contains("\\b")) {
FieldMergeField field = args.getField();
// Insert the text for this merge field as HTML data, using DocumentBuilder
DocumentBuilder builder = new DocumentBuilder(args.getDocument());
builder.moveToMergeField(args.getDocumentFieldName());
builder.write(field.getTextBefore());
builder.insertHtml((String) args.getFieldValue());
// The HTML text itself should not be inserted
// We have already inserted it as an HTML
args.setText("");
}
}
public void imageFieldMerging(ImageFieldMergingArgs args) {
// Do nothing
}
}
Shows how to insert images stored in a database BLOB field into a report.
public void imageFromBlob() throws Exception {
Document doc = new Document(getMyDir() + "Mail merge destination - Northwind employees.docx");
// Set up the event handler for image fields
doc.getMailMerge().setFieldMergingCallback(new HandleMergeImageFieldFromBlob());
// Loads the driver
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
// Open the database connection
String connString = "jdbc:ucanaccess://" + getDatabaseDir() + "Northwind.accdb";
// DSN-less DB connection
java.sql.Connection conn = java.sql.DriverManager.getConnection(connString, "Admin", "");
// Create and execute a command
java.sql.Statement statement = conn.createStatement();
java.sql.ResultSet resultSet = statement.executeQuery("SELECT * FROM Employees");
DataTable table = new DataTable(resultSet, "Employees");
// Perform mail merge
doc.getMailMerge().executeWithRegions(table);
// Close the database
conn.close();
doc.save(getArtifactsDir() + "MailMergeEvent.ImageFromBlob.docx");
}
private class HandleMergeImageFieldFromBlob implements IFieldMergingCallback {
public void fieldMerging(final FieldMergingArgs args) {
// Do nothing
}
// This is called when mail merge engine encounters Image:XXX merge field in the document.
// You have a chance to return an Image object, file name or a stream that contains the image.
public void imageFieldMerging(final ImageFieldMergingArgs e) {
// The field value is a byte array, just cast it and create a stream on it
ByteArrayInputStream imageStream = new ByteArrayInputStream((byte[]) e.getFieldValue());
// Now the mail merge engine will retrieve the image from the stream
e.setImageStream(imageStream);
}
}
Methods
Method | Description |
---|---|
fieldMerging(FieldMergingArgs args) | Called when the Aspose.Words mail merge engine is about to insert data into a merge field in the document. |
imageFieldMerging(ImageFieldMergingArgs args) | Called when the Aspose.Words mail merge engine is about to insert an image into a merge field. |
fieldMerging(FieldMergingArgs args)
public abstract void fieldMerging(FieldMergingArgs args)
Called when the Aspose.Words mail merge engine is about to insert data into a merge field in the document.
Examples:
Shows how to execute a mail merge with a custom callback that handles merge data in the form of HTML documents.
public void insertHtml() throws Exception {
Document doc = new Document(getMyDir() + "Field sample - MERGEFIELD.docx");
// Add a handler for the MergeField event
doc.getMailMerge().setFieldMergingCallback(new HandleMergeFieldInsertHtml());
final String htmlText = "\r\n Hello world!\r\n";
// Execute mail merge
doc.getMailMerge().execute(new String[]{"htmlField1"}, new String[]{htmlText});
// Save resulting document with a new name
doc.save(getArtifactsDir() + "MailMergeEvent.InsertHtml.docx");
}
private class HandleMergeFieldInsertHtml implements IFieldMergingCallback {
// This is called when merge field is actually merged with data in the document.
public void fieldMerging(final FieldMergingArgs args) throws Exception {
// All merge fields that expect HTML data should be marked with some prefix, e.g. 'html'
if (args.getDocumentFieldName().startsWith("html") && args.getField().getFieldCode().contains("\\b")) {
FieldMergeField field = args.getField();
// Insert the text for this merge field as HTML data, using DocumentBuilder
DocumentBuilder builder = new DocumentBuilder(args.getDocument());
builder.moveToMergeField(args.getDocumentFieldName());
builder.write(field.getTextBefore());
builder.insertHtml((String) args.getFieldValue());
// The HTML text itself should not be inserted
// We have already inserted it as an HTML
args.setText("");
}
}
public void imageFieldMerging(ImageFieldMergingArgs args) {
// Do nothing
}
}
Shows how to insert images stored in a database BLOB field into a report.
public void imageFromBlob() throws Exception {
Document doc = new Document(getMyDir() + "Mail merge destination - Northwind employees.docx");
// Set up the event handler for image fields
doc.getMailMerge().setFieldMergingCallback(new HandleMergeImageFieldFromBlob());
// Loads the driver
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
// Open the database connection
String connString = "jdbc:ucanaccess://" + getDatabaseDir() + "Northwind.accdb";
// DSN-less DB connection
java.sql.Connection conn = java.sql.DriverManager.getConnection(connString, "Admin", "");
// Create and execute a command
java.sql.Statement statement = conn.createStatement();
java.sql.ResultSet resultSet = statement.executeQuery("SELECT * FROM Employees");
DataTable table = new DataTable(resultSet, "Employees");
// Perform mail merge
doc.getMailMerge().executeWithRegions(table);
// Close the database
conn.close();
doc.save(getArtifactsDir() + "MailMergeEvent.ImageFromBlob.docx");
}
private class HandleMergeImageFieldFromBlob implements IFieldMergingCallback {
public void fieldMerging(final FieldMergingArgs args) {
// Do nothing
}
// This is called when mail merge engine encounters Image:XXX merge field in the document.
// You have a chance to return an Image object, file name or a stream that contains the image.
public void imageFieldMerging(final ImageFieldMergingArgs e) {
// The field value is a byte array, just cast it and create a stream on it
ByteArrayInputStream imageStream = new ByteArrayInputStream((byte[]) e.getFieldValue());
// Now the mail merge engine will retrieve the image from the stream
e.setImageStream(imageStream);
}
}
Parameters:
Parameter | Type | Description |
---|---|---|
args | FieldMergingArgs |
imageFieldMerging(ImageFieldMergingArgs args)
public abstract void imageFieldMerging(ImageFieldMergingArgs args)
Called when the Aspose.Words mail merge engine is about to insert an image into a merge field.
Examples:
Shows how to insert images stored in a database BLOB field into a report.
public void imageFromBlob() throws Exception {
Document doc = new Document(getMyDir() + "Mail merge destination - Northwind employees.docx");
// Set up the event handler for image fields
doc.getMailMerge().setFieldMergingCallback(new HandleMergeImageFieldFromBlob());
// Loads the driver
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
// Open the database connection
String connString = "jdbc:ucanaccess://" + getDatabaseDir() + "Northwind.accdb";
// DSN-less DB connection
java.sql.Connection conn = java.sql.DriverManager.getConnection(connString, "Admin", "");
// Create and execute a command
java.sql.Statement statement = conn.createStatement();
java.sql.ResultSet resultSet = statement.executeQuery("SELECT * FROM Employees");
DataTable table = new DataTable(resultSet, "Employees");
// Perform mail merge
doc.getMailMerge().executeWithRegions(table);
// Close the database
conn.close();
doc.save(getArtifactsDir() + "MailMergeEvent.ImageFromBlob.docx");
}
private class HandleMergeImageFieldFromBlob implements IFieldMergingCallback {
public void fieldMerging(final FieldMergingArgs args) {
// Do nothing
}
// This is called when mail merge engine encounters Image:XXX merge field in the document.
// You have a chance to return an Image object, file name or a stream that contains the image.
public void imageFieldMerging(final ImageFieldMergingArgs e) {
// The field value is a byte array, just cast it and create a stream on it
ByteArrayInputStream imageStream = new ByteArrayInputStream((byte[]) e.getFieldValue());
// Now the mail merge engine will retrieve the image from the stream
e.setImageStream(imageStream);
}
}
Parameters:
Parameter | Type | Description |
---|---|---|
args | ImageFieldMergingArgs |