Hi
I’m trying to insert an image from a database into a word doc using mailmerge and I’m getting an error
Buffer cannot be null.
Parameter name: buffer
This is the code…
SqlCommand cmd = new SqlCommand("up_SelectAdvisorDetails", connStr);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
string pUserName = Convert.ToString(Session["UserName"]);
cmd.Parameters.AddWithValue("@UserName", pUserName);
connStr.Open();
SqlDataReader dataReader = cmd.ExecuteReader();
while (dataReader.Read())
{
// Set up the event handler for image fields.
doc.MailMerge.FieldMergingCallback = new HandleMergeImageFieldFromBlob();
if (!dataReader["SignatureImage"].Equals(DBNull.Value))
{
doc.MailMerge.Execute(new string[]
{
"AdviserSignature"
},
new object[]
{
dataReader["SignatureImage"]
});
}
if (!dataReader["LogoImage"].Equals(DBNull.Value))
{
doc.MailMerge.Execute(new string[]
{
"AdviserLogo"
},
new object[]
{
dataReader["LogoImage"]
});
}
}
dataReader.Close();
Here’ s the merge field in the document…
«Image:AdviserLogo»
I’ve downloaded the lastest version today. Can you help me?
thanks
Peter
Hi Peter,
It is perfect that you managed to resolve the problem. Please feel free to ask in case of any issues, we are always glad to help you.
Best regards,
I supposed you are using C# because the code example provided in your first post is written in C#. Anyways, here is simple code example that check for nulls in IFieldMergingCallback:
[Test]
public void Test001()
{
// Open template.
Document doc = new Document(@"Test001\in.doc");
// Specify field merging callback.
doc.MailMerge.FieldMergingCallback = new FieldMergingCallback();
// Execute mail merge.
doc.MailMerge.Execute(new string[]
{
"myimage",
"nullimage"
}, new object[]
{
File.ReadAllBytes(@"Test001\test.png"), null
});
// Save output.
doc.Save(@"Test001\out.doc");
}
private class FieldMergingCallback: IFieldMergingCallback
{
public void FieldMerging(FieldMergingArgs args)
{
// do nothing.
}
void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs args)
{
if (args.FieldValue != null)
{
byte[] imageBytes = (byte[]) args.FieldValue;
args.ImageStream = new MemoryStream(imageBytes);
}
}
}
Unfortunately, I cannot answer this question because i did not see your database. Maybe there are records without image bytes.