【问题标题】:Aspose words API - mail merge functionality - can the "merged" text be richtext (with styles/images/bullets/tables)?Aspose words API - 邮件合并功能 - “合并”文本可以是富文本(带有样式/图像/项目符号/表格)吗?
【发布时间】:2020-05-01 15:41:22
【问题描述】:

寻找可以使用富文本执行邮件合并类型功能的 word api。基本上,文本将是带有字体样式的富文本/格式化文本,并且会有

a) images
b) bullets
c) tables

总体目的:创建带有书签的单词模板。从数据库中获取数据(对于那些字段)并插入。数据将是 html 文本/富文本。自动生成word文档。 python 或 .net api 将是首选。

Can Aspose.words work with richtext as described above?  Any other recommendations for excellent word APIs?

【问题讨论】:

    标签: aspose aspose.words


    【解决方案1】:

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

    【讨论】:

    • 第一种方法和第二种方法有什么区别?第二个不是邮件合并。准确地说,我们有一个带有表格的单词 docx。表有问题。我们需要将响应导出到相同的单词 docx 模板。每个表格单元格/响应都将具有格式化的文本 - 样式、字体、颜色、项目符号和图像。我们可以为每个单元格创建一个文档,然后使用邮件合并或替换功能使用第一种方法将其插入特定单元格吗?有什么限制吗?
    • FieldMergingCallback : HTML 插入 - 这个 HTML 可以有表格和项目符号,它还能工作吗?
    • 1. Aspose.Words 中的邮件合并模仿了相应的 MS Word 功能。这使得扩展模板语法变得不可能,因此引入了LINQ Reporting Engine,它使用自己的模板语法。 docs.aspose.com/display/wordsnet/… 2. 当然,您可以创建一个文档,然后将其插入到模板中需要的位置。 3. 是的,HTML 可以包含表格、图像、项目符号等。插入后,所有内容及其格式都将被保留。
    • 是否支持 css 样式?这意味着如果我们想用特定的字体名称/字体样式格式化 HTML 文本,或者使用插入模板的 MS 样式。
    • 是的,支持 css 样式。此外,InsetHtml 有一个标志,指示是否继承 DocumentBuilder 的格式。 apireference.aspose.com/words/net/aspose.words.documentbuilder/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    相关资源
    最近更新 更多