c# – 使用OpenXML SDK将RTF文件的内容嵌入到DOCX文件中
发布时间:2020-12-15 06:25:54 所属栏目:百科 来源:网络整理
导读:在我们基于MSWord-97的旧系统中,我们使用COM与.doc文件进行交互,并嵌入一个OLE对象,因此嵌入的文档在父级(而不是图标)中可见. 我们正在使用OpenXML SDK替代这个系统,因为它需要在我们的服务器上安装Word,该文件生成.docx文件.然而,我们仍然需要将RTF文件的内
在我们基于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文件中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |