寻找可以执行带RTF邮件合并功能的word api。基本上,文本将是具有字体样式的RTF文本/带格式的文本,并且将具有
a) images
b) bullets
c) tables
总体用途:创建带有书签的单词模板。从DB(针对那些字段)获取数据并插入。数据将为html文本/ richtext。自动生成Word文档。首选python或.net api。
Can Aspose.words work with richtext as described above? Any other recommendations for excellent word APIs?
答案 0 :(得分:0)
是的,您可以使用Aspose.Words实现此目的。您可以使用IFieldMergingCallback在邮件合并时插入格式化的文本。例如,请参见以下链接 https://apireference.aspose.com/words/net/aspose.words.mailmerging/ifieldmergingcallback 如果是覆盖文字(如果您指的是RTF或MarkDown格式),则首先需要将此内容读取到一个单独的Document实例中,然后使用DocumentBuilder.InsertDocument方法 https://apireference.aspose.com/words/net/aspose.words/documentbuilder/methods/insertdocument
下面的代码示例演示如何在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
}
}
希望这会有所帮助。 披露:我在Aspose.Words团队工作。