Hi James,
Thanks for your inquiry. You can use the shared code inside else if (rawHTML.ToLower().Contains("ul"))
.
Please check the following complete example to insert html (the UL tag
) at mail merge filed’s position. Hope this helps you. Please let us know if you have any more queries.
Document doc = new Document(MyDir + "MailMerge-Test.docx");
DocumentBuilder builder = new DocumentBuilder(doc);
doc.MailMerge.FieldMergingCallback = new Test30();
doc.MailMerge.Execute( new string[] { "Answer9" }, new object[] { "<UL><LI>Bullet 1</LI><LI>Bullet 2</LI></UL>" });
doc.Save(MyDir + "Out.docx");
private class Test30 : IFieldMergingCallback
{
/// <summary>
/// This is called when merge field is actually merged with data in the document.
/// </summary>
void IFieldMergingCallback.FieldMerging(FieldMergingArgs e)
{
// All merge fields that expect HTML data should be marked with some prefix, e.g. 'html'.
if (e.DocumentFieldName.StartsWith("Answer9"))
{
// Insert the text for this merge field as HTML data, using DocumentBuilder.
DocumentBuilder builder = new DocumentBuilder(e.Document);
string rawHTML = "";
if (e.FieldValue != null)
{
rawHTML = e.FieldValue.ToString();
if (rawHTML.ToLower().Contains("<p>"))
{
rawHTML = rawHTML.Replace("<p>", "");
rawHTML = rawHTML.Replace("<P>", "");
rawHTML = rawHTML.Replace("</p>", "<br /><br />");
rawHTML = rawHTML.Replace("</P>", "<br /><br />");
builder.InsertHtml(rawHTML);
}
else if (rawHTML.ToLower().Contains("<p "))
{
rawHTML = rawHTML.Replace("<p ", ");
rawHTML = rawHTML.Replace("<P ", ");
rawHTML = rawHTML.Replace("</p>", "<br /><br />");
rawHTML = rawHTML.Replace("</P>", "<br /><br />");
builder.InsertHtml(rawHTML);
}
else if (rawHTML.ToLower().Contains("ul"))
{
//rawHTML = rawHTML.Replace("<UL> ", "");
//rawHTML = rawHTML.Replace("<LI>", "• ");
//rawHTML = rawHTML.Replace("</LI>", "<br />");
//rawHTML = rawHTML.Replace("</UL>", "");
if (e.Field.Start.PreviousSibling != null && e.Field.Start.PreviousSibling.NodeType == NodeType.Run)
if (((Run)e.Field.Start.PreviousSibling).Text.Contains(ControlChar.LineBreak))
builder.MoveTo(e.Field.Start.PreviousSibling);
e.Field.Remove();
builder.StartBookmark("bm");
builder.InsertHtml(e.FieldValue.ToString());
builder.EndBookmark("bm");
e.Text = "";
if (e.FieldValue.ToString().ToLower().Contains("ul"))
{
builder.MoveToBookmark("bm", true, false);
Node currentNode = builder.CurrentNode.ParentNode;
while (currentNode.NodeType != NodeType.BookmarkEnd)
{
if (currentNode.NodeType == NodeType.Paragraph)
{
Paragraph para = (Paragraph)currentNode;
if (para.ListFormat.IsListItem)
{
para.ParagraphFormat.LeftIndent = 60;
}
}
currentNode = currentNode.NextPreOrder(e.Document);
}
}
}
//InsertHtmlWithBuilderFormatting(builder, rawHTML);
e.Text = "";
}
}
}
void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs e)
{
// Do nothing.
}
}