c# – 使用OpenXML SDK将RTF文件的内容嵌入到DOCX文件中

前端之家收集整理的这篇文章主要介绍了c# – 使用OpenXML SDK将RTF文件的内容嵌入到DOCX文件中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我们基于MSWord-97的旧系统中,我们使用COM与.doc文件进行交互,并嵌入一个OLE对象,因此嵌入的文档在父级(而不是图标)中可见.

我们正在使用OpenXML SDK替代这个系统,因为它需要在我们的服务器上安装Word,该文件生成.docx文件.然而,我们仍然需要将RTF文件内容嵌入生成的DOCX …具体来说,我们用文件内容替换书签.

我在网上发现了一些例子,但都有所不同.当我在Word中创建一个简单的示例并查看XML时,有很多东西可以定位/显示嵌入对象的可视化表示,而嵌入本身似乎并不太可怕.最简单的方法是什么?

解决方法

您可以将RTF文档的内容嵌入到OpenXML DOCX文件
通过使用AltChunk锚作为外部内容. AltChunk(w:altChunk)元素指定
您的OpenXML WordprocessingML文档中的位置,以插入RTF文档等外部内容.
下面的代码使用AltChunk类与AlternativeFormatImportPart类
将RTF文档的内容嵌入到最后一段后面的DOCX文件中:
using (WordprocessingDocument wordDocument = WordprocessingDocument.Open(@"your_docx_file.docx",true))
{
  string altChunkId = "AltChunkId5";

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

  // Read RTF document content.
  string rtfDocumentContent = File.ReadAllText("your_rtf_document.rtf",Encoding.ASCII);

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

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

  // Embed AltChunk after the last paragraph.
  mainDocPart.Document.Body.InsertAfter(
    altChunk,mainDocPart.Document.Body.Elements<Paragraph>().Last());

  mainDocPart.Document.Save();
}

如果要将Unicode RTF字符串嵌入到DOCX文件中,则必须转义Unicode字符.例如,请参考以下stackoverflow answer.

当您遇到错误文件已损坏”,然后确保Dispose()或Close()WordprocessingDocument.如果不关闭()文档,则w:altchunk的相关性不会存储在Document.xml.rels文件中.

猜你在找的C#相关文章