在我们旧的基于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的答案。
当您遇到错误时 “该文件已损坏“然后确保你 Dispose()
要么 Close()
该 WordprocessingDocument
。如果你没有关闭()文件然后关闭 w:altchunk
没有存储在 Document.xml.rels 文件。