How to fit image within a text box in the Word document
Mail merge is a process of merging data from a data source to a Word template document. Syncfusion® Essential® DocIO is a .NET Word Library used to generate reports like invoices, payrolls, letters, etc., by performing mail merge faster in a batch process without Microsoft Word or interop dependencies. Using this library, you can fit an image within a text box in the Word document using mail merge in C# and VB.NET.
Fit the image within the text box using C#:
- Create a new C# console application project.

- Install the Syncfusion.DocIO.WinForms NuGet package as a reference to your .NET Framework applications from the NuGet.org.

- Include the following namespaces in the Program.cs file:
C#
using Syncfusion.DocIO.DLS; using System.Drawing; using System.IO;
VB
Imports Syncfusion.DocIO.DLS Imports System.Drawing Imports System.IO
- Use the following code example to fit an image within a text box in the Word document using mail merge.
C#
// Opens the template document
using (WordDocument document = new WordDocument("../../Template.docx", FormatType.Docx))
{
// Uses the mail merge events handler for image fields
document.MailMerge.MergeImageField += new MergeImageFieldEventHandler(MergeField_ProductImage);
// Specifies the field names and field values
string[] fieldNames = new string[] { "Photo" };
string[] fieldValues = new string[] { "Logo.jpg" };
// Executes the mail merge
document.MailMerge.Execute(fieldNames, fieldValues);
// Unhooks mail merge events handler
document.MailMerge.MergeImageField -= new MergeImageFieldEventHandler(MergeField_ProductImage);
// Saves the WordDocument instance
document.Save("../../Sample.docx", FormatType.Docx);
}
VB
'Opens the template document
Using document As WordDocument = New WordDocument("../../Template.docx", FormatType.Docx)
'Uses the mail merge events handler for image fields
AddHandler document.MailMerge.MergeImageField, AddressOf MergeField_ProductImage
'Specifies the field names and field values
Dim fieldNames As String() = New String() {"Photo"}
Dim fieldValues As String() = New String() {"Logo.jpg"}
'Executes the mail merge
document.MailMerge.Execute(fieldNames, fieldValues)
'Unhooks mail merge events handler
RemoveHandler document.MailMerge.MergeImageField, AddressOf MergeField_ProductImage
'Saves the WordDocument instance
document.Save("../../Sample.docx", FormatType.Docx)
End Using
- Use the following helper method to bind the image from the file system and fit it within the text box during the mail merge process by using MergeImageFieldEventHandler.
C#
public void MergeField_ProductImage(object sender, MergeImageFieldEventArgs args)
{
// Binds image from the file system during mail merge
if (args.FieldName == "Photo")
{
string ProductFileName = args.FieldValue.ToString();
// Gets the image from the file system
args.Image = Image.FromFile("../../" + ProductFileName);
// Gets the picture, to be merged for the image merge field
WPicture picture = args.Picture;
// Gets the text box format
WTextBoxFormat textBoxFormat = (args.CurrentMergeField.OwnerParagraph.OwnerTextBody.Owner as WTextBox).TextBoxFormat;
// Resizes the picture to fit within the text box
float scalePercentage = 100;
if (picture.Width != textBoxFormat.Width)
{
// Calculates value for width scale factor
scalePercentage = textBoxFormat.Width / picture.Width * 100;
// This will resize the width
picture.WidthScale *= scalePercentage / 100;
}
scalePercentage = 100;
if (picture.Height != textBoxFormat.Height)
{
// Calculates value for height scale factor
scalePercentage = textBoxFormat.Height / picture.Height * 100;
// This will resize the height
picture.HeightScale *= scalePercentage / 100;
}
}
}
VB
Public Sub MergeField_ProductImage(ByVal sender As Object, ByVal args As MergeImageFieldEventArgs)
'Binds image from the file system during mail merge
If args.FieldName = "Photo" Then
Dim ProductFileName As String = args.FieldValue.ToString()
'Gets the image from the file system
args.Image = Image.FromFile("../../" + ProductFileName)
'Gets the picture, to be merged for the image merge field
Dim picture As WPicture = args.Picture
'Gets the text box format
Dim textBoxFormat As WTextBoxFormat = TryCast(args.CurrentMergeField.OwnerParagraph.OwnerTextBody.Owner, WTextBox).TextBoxFormat
'Resizes the picture to fit within text box
Dim scalePercentage As Single = 100
If picture.Width <> textBoxFormat.Width Then
'Calculates value for width scale factor
scalePercentage = textBoxFormat.Width / picture.Width * 100
'This will resize the width
picture.WidthScale *= scalePercentage / 100
End If
scalePercentage = 100
If picture.Height <> textBoxFormat.Height Then
'Calculates value for height scale factor
scalePercentage = textBoxFormat.Height / picture.Height * 100
'This will resize the height
picture.HeightScale *= scalePercentage / 100
End If
End If
End Sub
A complete working example to fit image within a text box in the Word document using Mail merge in C# can be downloaded from GitHub.
By executing the application, you will get the output Word document as follows: 
Take a moment to peruse the documentation, where you can find basic Word document processing options along with features like mail merge, merge and split documents, find and replace text in the Word document, protect the Word documents, and most importantly, PDF and image conversions with code examples.
Explore more about the rich set of Syncfusion® Word Framework features.
Starting with v16.2.0.x, if you reference Syncfusion® assemblies from a trial setup or from the NuGet feed, include a license key in your projects. Refer to the link to learn about generating and registering a Syncfusion® license key in your application to use the components without a trial message.