想通了你可以通過使用AltChunk
錨外部內容嵌入RTF
文件的內容爲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<Paragraph>().Last());
mainDocPart.Document.Save();
}
如果你希望嵌入的Unicode RTF
字符串轉換成DOCX
文件,那麼你必須逃避Unicode字符。有關示例,請參閱以下stackoverflow answer。
當您遇到錯誤「文件已損壞」然後確保你Dispose()
或Close()
的WordprocessingDocument
。如果您沒有關閉()文檔,那麼w:altchunk
的關聯並不存儲在Document.xml.rels文件中。
那麼我暫停了這個任務,但在3.5年後重新開放了它。我開始寫一個關於SO的問題,它讓我想起已經存在的問題! – 2013-11-27 15:58:22
可能相關,也許它可以幫助某人:http://social.msdn.microsoft.com/Forums/office/en-US/7a729264-8747-4fc3-a604-d2f4443f3e84/insert-rtf-file-in-word- processing-document-using-office-open-xml?forum = oxmlsdk – 2013-11-27 16:09:00