使用OpenXML SDK将RTF文件的内容嵌入到DOCX文件中
在我们旧的基于MSWord-97的系统中,我们使用COM与.doc文件进行交互,并嵌入OLE对象,因此嵌入的文档在父文件中可见(而不是图标)。
我们用一个使用OpenXML SDK的系统取而代之,因为它需要在我们的服务器上安装Word,这会生成.docx文件。 但是我们仍然需要将RTF文件的内容嵌入到生成的DOCX中…具体来说,我们用文件的内容替换书签。
我在网上找到了一些例子,但它们都有所不同。 当我在Word中创建一个简单的示例并查看XML时,有很多东西可以定位/显示嵌入对象的可视化表示,而嵌入本身似乎并不太可怕。 最简单的方法是什么?
您可以使用AltChunk
锚点将外部内容嵌入到OpenXML DOCX
文件中。 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().Last()); mainDocPart.Document.Save(); }
如果要将Unicode RTF
字符串嵌入到DOCX
文件中,则必须转义Unicode字符。 有关示例,请参阅以下stackoverflow答案 。
当您遇到错误“文件已损坏 ”时,请确保您Dispose()
或Close()
WordprocessingDocument
。 如果您没有Close()文档,那么w:altchunk
不会存储在Document.xml.rels文件中。
这个家伙好像已经用他自己的问题和答案解决了我如何使用OpenXml 2.0将任何文件类型嵌入到Microsoft Word中