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 invoice, payroll, letter, etc., by performing mail merge faster in a batch process without Microsoft Word or interop dependencies. Using this library, you can fit 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 Syncfusion.DocIO.WinForms NuGet package as a reference to your .NET Framework applications from the NuGet.org.
- Include the following namespace 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 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 file system and fit it within the text box during Mail merge process by using MergeImageFieldEventHandler.
C#
public void MergeField_ProductImage(object sender, MergeImageFieldEventArgs args) { //Binds image from file system during mail merge if (args.FieldName == "Photo") { string ProductFileName = args.FieldValue.ToString(); //Gets the image from file system args.Image = Image.FromFile("../../" + ProductFileName); //Gets the picture, to be merged for 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 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 file system during mail merge If args.FieldName = "Photo" Then Dim ProductFileName As String = args.FieldValue.ToString() 'Gets the image from file system args.Image = Image.FromFile("../../" + ProductFileName) 'Gets the picture, to be merged for 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 trial setup or from the NuGet feed, include a license key in your projects. Refer to link to learn about generating and registering Syncfusion license key in your application to use the components without trail message.