Вопрос по .net, c#, openxml, ms-word – Можно ли вставить фрагменты текста RTF в документ Word (.docx) с помощью OpenXml?

4

m. Разработка приложения .NET C #, которое должно создавать документ Word, вставляя фрагменты текста RTF, которые хранятся в базе данных. Кто-нибудь знает, возможно ли это и как это сделать с помощью OpenXml (или COM-взаимодействия)?

Я неНеобходимо преобразовать один полный RTF-файл в документ Word. Мне нужно программно создать документ Word и добавить фрагменты текста RTF в разных местах документа Word, используя C #.

Ты имеешь ввиду docx? OpenXml может создать документ. Я бы использовал OpenXml через COM-взаимодействие. paparazzo
Я бы предпочел использовать OpenXml поверх COM-взаимодействия, но я нене знаю, если этоМожно вставлять фрагменты текста RTF в документ OpenXml без необходимости его предварительного анализа. Если кто-нибудь может указать мне правильное направление, это было бы хорошо. Или, если это можно сделать с помощью Xaml (используя потоковый документ), который 'Это также хорошо для меня, чем я буду использовать WPF RichTextBox вместо WinForms RichTextBox для вставки фрагментов текста в БД. Gert

Ваш Ответ

1   ответ
6

Вы можете импортировать внешний контент черезaltChunk якорь.altChunk Якорь определяет место в текстовом документе для вставки внешнего содержимого, такого как RTF, HTML, XML, ...

Для получения дополнительной информации оaltChunk якорь, пожалуйста, обратитесь к следующемуMSDN статья.

Следующий код показывает, как вставить фрагмент RTF в текстовый документ с использованием OpenXML SDK:

Откройте документ Word.СоздатьAlternativeFormatImportPart чанк с уникальным идентификатором чанка.Подайте ваши RTF-данные в блок (ям, используяMemoryStream Вот).СоздатьAltChunk с тем же идентификатором, который использовался для создания.AlternativeFormatImportPartСохранить слово документ ..

static void Main(string[] args)
{
  using (WordprocessingDocument doc = WordprocessingDocument.Open(@"test.docx", true))
  {
    string altChunkId = "AltChunkId5";

    MainDocumentPart mainDocPart = doc.MainDocumentPart;
    AlternativeFormatImportPart chunk = mainDocPart.AddAlternativeFormatImportPart(
        AlternativeFormatImportPartType.Rtf, altChunkId);                

    string rtfEncodedString = @"{\rtf1\ansi{\fonttbl\f0\fswiss Helvetica;}\f0\pard This is some {\b bold} text.\par}";

    using (MemoryStream ms = new MemoryStream(Encoding.ASCII.GetBytes(val)))
    {
      chunk.FeedData(ms);
    }

    AltChunk altChunk = new AltChunk();
    altChunk.Id = altChunkId;

    mainDocPart.Document.Body.InsertAfter(
      altChunk, mainDocPart.Document.Body.Elements().Last());

    mainDocPart.Document.Save();

  }
}

Похожие вопросы