首页 文章

如何使用Aspose.Words for .NET将RichText保存到Word?

提问于
浏览
0

我们使用Aspose.Words for .NET在我们的应用程序中导出Word文档 . 现在我必须在导出的文档中包含RichText内容(实际上是一个FlowDocument) . 为了导出,我们正在实现IMailMergeDataSource接口 . 这个IMailMergeDataSource实现的GetValue函数由Aspose库调用,该函数如下所示:

public override bool GetValue(string fieldName, out object fieldValue) {  ...  }

所以我在Word模板中获取当前字段的字段名称,并且我必须将fieldValue设置为字符串,以便fieldValue中的字符串可以出现在Word文档中 .

但是,例如,当我将fieldValue设置为FlowDocument时,结果将是一个XML字符串(FlowDocument对象的ToString表示)

1 回答

  • 1

    我建议您在fieldValue中传递富文本 . 将此富文本加载到Aspose.Words Document对象中,如下所示(在FieldMerging事件中):

    string rtfStr = "{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang3079{\\fonttbl{\\f0\\fnil\\fcharset0 Microsoft Sans Serif;}}{\\colortbl ;\\red255\\green0\\blue0;\\red0\\green128\\blue0;\\red0\\green0\\blue255;}\\viewkind4\\uc1\\pard\\cf1\\f0\\fs17 Rot.\\cf0\\fs17  \\cf2\\fs17 Gr\\'fcn.\\cf0\\fs17  \\cf3\\fs17 Blau.\\cf0\\fs17  \\i\\fs17 Kursiv.\\i0\\fs17  \\strike\\fs17 Durchgestrichen. \\ul\\strike0 Unterstrichen.\\ulnone\\fs17  \\b\\fs17 Fett.\\b0\\fs17\\par}";
    
    System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
    byte[] dataBytes = encoding.GetBytes(rtfStr);
    MemoryStream stream = new MemoryStream(dataBytes);
    
    LoadOptions loadOptions = new LoadOptions();
    loadOptions.LoadFormat = LoadFormat.Rtf;
    
    Document doc = new Document(stream, loadOptions);
    

    您需要实现IFieldMergingCallback接口,以便能够控制在邮件合并操作期间如何将数据插入合并字段 .

    private class HandleMergeFields : IFieldMergingCallback
    {
        void IFieldMergingCallback.FieldMerging(FieldMergingArgs e)
        {
            DocumentBuilder builder = new DocumentBuilder(e.Document);
    
            builder.MoveToMergeField("fieldName");
            Node node = builder.CurrentNode;
    
            // doc is an RTF document we created from RTF string
            InsertDocument(node, doc);
    

    我希望这对你的场景有所帮助 . 如果它没有帮助,请告诉我 .

相关问题