微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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文件中.

原文地址:https://www.jb51.cc/csharp/95631.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐