Aspose Words API-邮件合并功能-“合并的”文本可以是RTF文本(带有样式/图像/项目符号/表格)吗?

时间:2020-05-01 15:41:22

标签: aspose aspose.words

寻找可以执行带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?

1 个答案:

答案 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团队工作。

相关问题