Как сохранить RichText в Word с Aspose.Words для .NET? - PullRequest
0 голосов
/ 02 апреля 2012

Мы используем Aspose.Words для .NET для экспорта документов Word в нашем приложении.Теперь я должен включить содержимое RichText (фактически, FlowDocument) в экспортируемый документ.Для экспорта мы реализуем интерфейс IMailMergeDataSource.Функция GetValue этой реализации IMailMergeDataSource вызывается из библиотеки Aspose, и эта функция выглядит следующим образом:

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

Итак, я получаю имя текущего поля в шаблоне Word, и мне нужноустановите fieldValue в строку, чтобы строка в fieldValue могла появляться в документе Word.

Но, например, когда я устанавливаю fieldValue в FlowDocument, результатом будет строка XML (представление ToStringобъекта FlowDocument)

1 Ответ

1 голос
/ 24 апреля 2012

Я бы посоветовал вам передать форматированный текст в поле Value.Загрузите этот форматированный текст в объект документа Aspose.Words следующим образом (в событии 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); 

Надеюсь, это поможет в вашем сценарии.Если это не поможет, пожалуйста, дайте мне знать.

...