是否可以使用OpenXml将RTF文本片段插入Word文档(.docx)?

时间:2013-02-05 16:01:29

标签: c# .net ms-word openxml

我正在开发一个.NET C#应用程序,需要创建一个Word文档,插入存储在数据库中的RTF文本片段。有谁知道是否有可能以及如何使用OpenXml(或COM互操作)完成此操作?

我不需要将一个完整的RTF文件转换为Word文档。我需要以编程方式创建一个Word文档,并使用C#在word文档的不同位置添加RTF文本。

1 个答案:

答案 0 :(得分:6)

您可以通过 altChunk 锚点导入外部内容。 altChunk 锚定义要插入的word文档中的位置 外部内容,如RTF,HTML,XML,......

有关 altChunk 锚点的更多信息,请参阅 以下MSDN文章。

以下代码显示了如何使用。将一大块RTF插入到Word文档中 OpenXML SDK:

  1. 打开word文档。
  2. 使用唯一的块ID创建AlternativeFormatImportPart块。
  3. 将RTF数据输入块(我在这里使用MemoryStream)。
  4. 使用与创建AltChunk
  5. 相同的ID创建AlternativeFormatImportPart
  6. 保存word文档。
  7. 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<Paragraph>().Last());
    
        mainDocPart.Document.Save();
    
      }
    }