Mr.*_*Boy 11 .net c# openxml openxml-sdk
在我们旧的基于MSWord-97的系统中,我们使用COM与.doc文件交互,并嵌入OLE对象,因此嵌入的文档在父级中可见(而不是图标).
我们用一个使用OpenXML SDK的系统取而代之,因为它需要在我们的服务器上安装Word,它会生成.docx文件.但是我们仍然需要将RTF文件的内容嵌入到生成的DOCX中...具体来说,我们用文件的内容替换书签.
我在网上找到了一些例子,但它们都有所不同.当我在Word中创建一个简单的示例并查看XML时,有很多东西可以定位/显示嵌入对象的可视化表示,而嵌入本身似乎并不太可怕.最简单的方法是什么?
Han*_*ans 12
您可以使用外部内容的锚点将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();
}
Run Code Online (Sandbox Code Playgroud)
如果要将Unicode RTF字符串嵌入到DOCX文件中,则必须转义Unicode字符.有关示例,请参阅以下stackoverflow答案.
当您遇到错误"该文件损坏 ",那么请确保您Dispose()或Close()将WordprocessingDocument.如果您没有关闭()文档,那么该文档的关联w:altchunk不会存储在Document.xml.rels文件中.
| 归档时间: |
|
| 查看次数: |
4735 次 |
| 最近记录: |