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

标签 c# .net openxml openxml-sdk

在我们基于 MSWord-97 的旧系统中,我们使用 COM 与 .doc 文件交互,并嵌入 OLE 对象,因此嵌入的文档在父级中可见(而不是图标)。

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

我在网上找到了几个例子,但它们都不一样。当我在 Word 中创建一个简单的示例并查看 XML 时,有很多东西可以定位/显示嵌入对象的视觉表示,而嵌入本身似乎并不太可怕。最简单的方法是什么?

最佳答案

您可以将 RTF 文档的内容嵌入到 OpenXML DOCX 文件中 通过对外部内容使用 AltChunk anchor 。 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() 文字处理文档。如果您不关闭 () 文档,则 w:altchunk 的关系不会存储在 Document.xml.rels 文件中。

关于c# - 使用 OpenXML SDK 将 RTF 文件的内容嵌入到 DOCX 文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3354299/

相关文章:

C# 进程的实时标准输出/错误捕获

c# - iTextSharp - 关闭 pdf 时出现 "Do you want to save"提示

.net - 执行 F# 脚本

ms-word - 如何使用 Open XML SDK 获取 MS Word 总页数?

c# - NLog 不包含过滤器似乎不起作用

c# - 一个按钮执行两个命令

.net - 如何在通用配置中指定WCF已知类型?

.net - 人们将哪些 .Net 属性应用于他们的代码?

c# - 使用 OpenXML 和 C# 处理 word 文档

c# - 使用 Open XML 和 C# 读取 Word 书签