正在寻找一个可以用richtext执行邮件合并功能的word api。基本上,文本将是带有字体样式的richtext格式化的文本,并且会有
a) images
b) bullets
c) tables
总体目的:创建一个带有书签的word模板。从DB中获取数据(针对这些字段)并插入。数据将是html textrichtext。 自动生成word文档。python或.net api将是首选。
Can Aspose.words work with richtext as described above? Any other recommendations for excellent word APIs?
是的,您可以使用Aspose.Words.Words.NET来实现这个功能。您可以使用IFieldMergingCallback在邮件合并时插入格式化的文本。例如,请看下面的链接,您可以在邮件合并时使用IFieldMergingCallback插入格式化的文本。https:/apireference.aspose.comwordsnetaspose.words.mailmergingifieldmergingcallback。在达到文本的情况下(如果你指的是RTF或MarkDown格式),你首先需要将这些内容读到一个单独的Document实例中,然后使用DocumentBuilder.InsertDocument方法。https:/apireference.aspose.comwordsnetaspose.wordsdocumentbuildermethodsinsertdocument。
下面的代码示例显示了如何在IFieldMergingCallback中使用InsertHtml方法。
[Test]
public void Test001()
{
Document doc = new Document(@"C:\Temp\in.docx");
doc.MailMerge.FieldMergingCallback = new HandleMergeFieldInsertHtml();
const string html = @"<h1>Hello world!</h1>";
doc.MailMerge.Execute(new string[] { "myField" }, new object[] { html });
doc.Save(@"C:\Temp\out.docx");
}
private class HandleMergeFieldInsertHtml : IFieldMergingCallback
{
void IFieldMergingCallback.FieldMerging(FieldMergingArgs args)
{
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
}
}
如果你想手动格式化文本,那么你可以使用DocumentBuilder的适当属性。
[Test]
public void Test001()
{
Document doc = new Document(@"C:\Temp\in.docx");
doc.MailMerge.FieldMergingCallback = new HandleMergeFieldInsertText();
const string text = @"Hello world!";
doc.MailMerge.Execute(new string[] { "myField" }, new object[] { text });
doc.Save(@"C:\Temp\out.docx");
}
private class HandleMergeFieldInsertText : IFieldMergingCallback
{
void IFieldMergingCallback.FieldMerging(FieldMergingArgs args)
{
FieldMergeField field = args.Field;
DocumentBuilder builder = new DocumentBuilder(args.Document);
builder.MoveToMergeField(args.DocumentFieldName);
// Apply style or other formatting.
builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Heading1;
builder.Write(field.TextBefore ?? "");
builder.Write((string)args.FieldValue);
// The text itself should not be inserted
// We have already inserted it using DocumentBuilder.
args.Text = "";
}
void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs args)
{
// Do nothing
}
}
希望这能帮助到你.Disclosure:我在Aspose.Words团队工作。