java.lang.Objectcom.aspose.words.FieldMergingArgsBase
public abstract class FieldMergingArgsBase
Example:
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 = "<html>\r\n<h1>Hello world!</h1>\r\n</html>";
// 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 /*IFieldMergingCallback.*/imageFieldMerging(ImageFieldMergingArgs args) {
// Do nothing
}
}
Property Getters/Setters Summary | ||
---|---|---|
Document | getDocument() | |
Returns the |
||
java.lang.String | getDocumentFieldName() | |
Gets the name of the merge field as specified in the document. | ||
FieldMergeField | getField() | |
Gets the object that represents the current merge field. | ||
java.lang.String | getFieldName() | |
Gets the name of the merge field in the data source. | ||
java.lang.Object | getFieldValue() | |
void | setFieldValue(java.lang.Object value) | |
Gets or sets the value of the field from the data source. | ||
int | getRecordIndex() | |
Gets the zero based index of the record that is being merged. | ||
java.lang.String | getTableName() | |
Gets the name of the data table for the current merge operation or empty string if the name is not available. |
Property Getters/Setters Detail |
---|
getDocument | |
public Document getDocument() |
Example:
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 = "<html>\r\n<h1>Hello world!</h1>\r\n</html>"; // 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 /*IFieldMergingCallback.*/imageFieldMerging(ImageFieldMergingArgs args) { // Do nothing } }
getDocumentFieldName | |
public java.lang.String getDocumentFieldName() |
If you have a mapping from a document field name to a different data source field name, then this is the original field name as specified in the document.
If you specified a field name prefix, for example "Image:MyFieldName" in the document, then DocumentFieldName returns field name without the prefix, that is "MyFieldName".
Example:
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 = "<html>\r\n<h1>Hello world!</h1>\r\n</html>"; // 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 /*IFieldMergingCallback.*/imageFieldMerging(ImageFieldMergingArgs args) { // Do nothing } }
getField | |
public FieldMergeField getField() |
Example:
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 = "<html>\r\n<h1>Hello world!</h1>\r\n</html>"; // 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 /*IFieldMergingCallback.*/imageFieldMerging(ImageFieldMergingArgs args) { // Do nothing } }
getFieldName | |
public java.lang.String getFieldName() |
If you have a mapping from a document field name to a different data source field name, then this is the mapped field name.
If you specified a field name prefix, for example "Image:MyFieldName" in the document, then FieldName returns field name without the prefix, that is "MyFieldName".
Example:
Shows how to insert checkbox form fields into a document during mail merge.public void insertCheckBox() throws Exception { Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.startTable(); builder.insertCell(); builder.insertField(" MERGEFIELD TableStart:StudentCourse "); builder.insertCell(); builder.insertField(" MERGEFIELD CourseName "); builder.insertCell(); builder.insertField(" MERGEFIELD TableEnd:StudentCourse "); builder.endTable(); // Add a handler for the MergeField event doc.getMailMerge().setFieldMergingCallback(new HandleMergeFieldInsertCheckBox()); // Execute mail merge with regions DataTable dataTable = getStudentCourseDataTable(); doc.getMailMerge().executeWithRegions(dataTable); // Save resulting document with a new name doc.save(getArtifactsDir() + "MailMergeEvent.InsertCheckBox.docx"); } private class HandleMergeFieldInsertCheckBox implements IFieldMergingCallback { /** * This is called for each merge field in the document * when Document.MailMerge.ExecuteWithRegions is called. */ public void fieldMerging(final FieldMergingArgs args) throws Exception { if (args.getDocumentFieldName().equals("CourseName")) { // The name of the table that we are merging can be found here Assert.assertEquals(args.getTableName(), "StudentCourse"); // Insert the checkbox for this merge field, using DocumentBuilder DocumentBuilder builder = new DocumentBuilder(args.getDocument()); builder.moveToMergeField(args.getFieldName()); builder.insertCheckBox(args.getDocumentFieldName() + mCheckBoxCount, false, 0); // Get the actual value of the field String fieldValue = args.getFieldValue().toString(); // In this case, for every record index 'n', the corresponding field value is "Course n" Assert.assertEquals(args.getRecordIndex(), Character.getNumericValue(fieldValue.charAt(7))); builder.write(fieldValue); mCheckBoxCount++; } } public void imageFieldMerging(final ImageFieldMergingArgs args) { // Do nothing } /** * Counter for CheckBox name generation. */ private int mCheckBoxCount; } /** * Create DataTable and fill it with data. * In real life this DataTable should be filled from a database. */ private static DataTable getStudentCourseDataTable() throws Exception { DataTable dataTable = new DataTable("StudentCourse"); dataTable.getColumns().add("CourseName"); for (int i = 0; i < 10; i++) { DataRow datarow = dataTable.newRow(); dataTable.getRows().add(datarow); datarow.set(0, "Course " + i); } return dataTable; }
getFieldValue/setFieldValue | |
public java.lang.Object getFieldValue() / public void setFieldValue(java.lang.Object value) |
Example:
Shows how to use data source value of the field.public void fieldFormats() throws Exception { Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.insertField("MERGEFIELD TextField \\* Caps", null); builder.write(", "); builder.insertField("MERGEFIELD TextField2 \\* Upper", null); builder.write(", "); builder.insertField("MERGEFIELD NumericField \\# 0.0", null); builder.getDocument().getMailMerge().setFieldMergingCallback(new FieldValueMergingCallback()); builder.getDocument().getMailMerge().execute( new String[]{"TextField", "TextField2", "NumericField"}, new Object[]{"Original value", "Original value", 10}); Assert.assertEquals("New Value, New value from FieldMergingArgs, 20.0", doc.getText().trim()); } private static class FieldValueMergingCallback implements IFieldMergingCallback { /// <summary> /// This is called when merge field is actually merged with data in the document. /// </summary> public void /*IFieldMergingCallback.*/fieldMerging(FieldMergingArgs e) { switch (e.getFieldName()) { case "TextField": Assert.assertEquals("Original value", e.getFieldValue()); e.setFieldValue("New value"); break; case "TextField2": Assert.assertEquals("Original value", e.getFieldValue()); e.setText("New value from FieldMergingArgs"); // Should suppress e.FieldValue and ignore format e.setFieldValue("new value"); break; case "NumericField": Assert.assertEquals(10, e.getFieldValue()); e.setFieldValue(20); break; } } public void /*IFieldMergingCallback.*/imageFieldMerging(ImageFieldMergingArgs e) { // Do nothing } }
getRecordIndex | |
public int getRecordIndex() |
Example:
Shows how to insert checkbox form fields into a document during mail merge.public void insertCheckBox() throws Exception { Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.startTable(); builder.insertCell(); builder.insertField(" MERGEFIELD TableStart:StudentCourse "); builder.insertCell(); builder.insertField(" MERGEFIELD CourseName "); builder.insertCell(); builder.insertField(" MERGEFIELD TableEnd:StudentCourse "); builder.endTable(); // Add a handler for the MergeField event doc.getMailMerge().setFieldMergingCallback(new HandleMergeFieldInsertCheckBox()); // Execute mail merge with regions DataTable dataTable = getStudentCourseDataTable(); doc.getMailMerge().executeWithRegions(dataTable); // Save resulting document with a new name doc.save(getArtifactsDir() + "MailMergeEvent.InsertCheckBox.docx"); } private class HandleMergeFieldInsertCheckBox implements IFieldMergingCallback { /** * This is called for each merge field in the document * when Document.MailMerge.ExecuteWithRegions is called. */ public void fieldMerging(final FieldMergingArgs args) throws Exception { if (args.getDocumentFieldName().equals("CourseName")) { // The name of the table that we are merging can be found here Assert.assertEquals(args.getTableName(), "StudentCourse"); // Insert the checkbox for this merge field, using DocumentBuilder DocumentBuilder builder = new DocumentBuilder(args.getDocument()); builder.moveToMergeField(args.getFieldName()); builder.insertCheckBox(args.getDocumentFieldName() + mCheckBoxCount, false, 0); // Get the actual value of the field String fieldValue = args.getFieldValue().toString(); // In this case, for every record index 'n', the corresponding field value is "Course n" Assert.assertEquals(args.getRecordIndex(), Character.getNumericValue(fieldValue.charAt(7))); builder.write(fieldValue); mCheckBoxCount++; } } public void imageFieldMerging(final ImageFieldMergingArgs args) { // Do nothing } /** * Counter for CheckBox name generation. */ private int mCheckBoxCount; } /** * Create DataTable and fill it with data. * In real life this DataTable should be filled from a database. */ private static DataTable getStudentCourseDataTable() throws Exception { DataTable dataTable = new DataTable("StudentCourse"); dataTable.getColumns().add("CourseName"); for (int i = 0; i < 10; i++) { DataRow datarow = dataTable.newRow(); dataTable.getRows().add(datarow); datarow.set(0, "Course " + i); } return dataTable; }
getTableName | |
public java.lang.String getTableName() |
Example:
Shows how to insert checkbox form fields into a document during mail merge.public void insertCheckBox() throws Exception { Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.startTable(); builder.insertCell(); builder.insertField(" MERGEFIELD TableStart:StudentCourse "); builder.insertCell(); builder.insertField(" MERGEFIELD CourseName "); builder.insertCell(); builder.insertField(" MERGEFIELD TableEnd:StudentCourse "); builder.endTable(); // Add a handler for the MergeField event doc.getMailMerge().setFieldMergingCallback(new HandleMergeFieldInsertCheckBox()); // Execute mail merge with regions DataTable dataTable = getStudentCourseDataTable(); doc.getMailMerge().executeWithRegions(dataTable); // Save resulting document with a new name doc.save(getArtifactsDir() + "MailMergeEvent.InsertCheckBox.docx"); } private class HandleMergeFieldInsertCheckBox implements IFieldMergingCallback { /** * This is called for each merge field in the document * when Document.MailMerge.ExecuteWithRegions is called. */ public void fieldMerging(final FieldMergingArgs args) throws Exception { if (args.getDocumentFieldName().equals("CourseName")) { // The name of the table that we are merging can be found here Assert.assertEquals(args.getTableName(), "StudentCourse"); // Insert the checkbox for this merge field, using DocumentBuilder DocumentBuilder builder = new DocumentBuilder(args.getDocument()); builder.moveToMergeField(args.getFieldName()); builder.insertCheckBox(args.getDocumentFieldName() + mCheckBoxCount, false, 0); // Get the actual value of the field String fieldValue = args.getFieldValue().toString(); // In this case, for every record index 'n', the corresponding field value is "Course n" Assert.assertEquals(args.getRecordIndex(), Character.getNumericValue(fieldValue.charAt(7))); builder.write(fieldValue); mCheckBoxCount++; } } public void imageFieldMerging(final ImageFieldMergingArgs args) { // Do nothing } /** * Counter for CheckBox name generation. */ private int mCheckBoxCount; } /** * Create DataTable and fill it with data. * In real life this DataTable should be filled from a database. */ private static DataTable getStudentCourseDataTable() throws Exception { DataTable dataTable = new DataTable("StudentCourse"); dataTable.getColumns().add("CourseName"); for (int i = 0; i < 10; i++) { DataRow datarow = dataTable.newRow(); dataTable.getRows().add(datarow); datarow.set(0, "Course " + i); } return dataTable; }