MailMergeFieldMergingCallback Property |
Namespace: Aspose.Words.MailMerging
public void InsertHtml() { Document doc = new Document(MyDir + "Field MERGEFIELD.docx"); // Add a handler for the MergeField event doc.MailMerge.FieldMergingCallback = new HandleMergeFieldInsertHtml(); const string html = @"<html> <h1>Hello world!</h1> </html>"; // Execute mail merge doc.MailMerge.Execute(new string[] { "htmlField1" }, new object[] { html }); // Save resulting document with a new name doc.Save(ArtifactsDir + "MailMergeEvent.InsertHtml.docx"); } private class HandleMergeFieldInsertHtml : IFieldMergingCallback { /// <summary> /// This is called when merge field is actually merged with data in the document. /// </summary> void IFieldMergingCallback.FieldMerging(FieldMergingArgs args) { // All merge fields that expect HTML data should be marked with some prefix, e.g. 'html' if (args.DocumentFieldName.StartsWith("html") && args.Field.GetFieldCode().Contains("\\b")) { FieldMergeField field = args.Field; // Insert the text for this merge field as HTML data, using DocumentBuilder DocumentBuilder builder = new DocumentBuilder(args.Document); builder.MoveToMergeField(args.DocumentFieldName); builder.Write(field.TextBefore); builder.InsertHtml((string) args.FieldValue); // The HTML text itself should not be inserted // We have already inserted it as an HTML args.Text = ""; } } void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs args) { // Do nothing } }
public void ImageFromBlob() { Document doc = new Document(MyDir + "Mail merge destination - Northwind employees.docx"); // Set up the event handler for image fields doc.MailMerge.FieldMergingCallback = new HandleMergeImageFieldFromBlob(); // Open a database connection string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + DatabaseDir + "Northwind.mdb"; OleDbConnection conn = new OleDbConnection(connString); conn.Open(); // Open the data reader. It needs to be in the normal mode that reads all record at once OleDbCommand cmd = new OleDbCommand("SELECT * FROM Employees", conn); IDataReader dataReader = cmd.ExecuteReader(); // Perform mail merge doc.MailMerge.ExecuteWithRegions(dataReader, "Employees"); // Close the database conn.Close(); doc.Save(ArtifactsDir + "MailMergeEvent.ImageFromBlob.docx"); } private class HandleMergeImageFieldFromBlob : IFieldMergingCallback { void IFieldMergingCallback.FieldMerging(FieldMergingArgs args) { // Do nothing } /// <summary> /// 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. /// </summary> void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs e) { // The field value is a byte array, just cast it and create a stream on it MemoryStream imageStream = new MemoryStream((byte[])e.FieldValue); // Now the mail merge engine will retrieve the image from the stream e.ImageStream = imageStream; } }