gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:43:55 26 4
gpt4 key购买 nike

在我们基于 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com