Aspose words API - 邮件合并功能 - "合并 "后的文本可以是richtext吗(使用styleimagesbulletstables)?

问题描述 投票:0回答:1

正在寻找一个可以用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 aspose.words
1个回答
0
投票

是的,您可以使用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团队工作。

© www.soinside.com 2019 - 2024. All rights reserved.