Ответ 1
Вы можете вставлять содержимое документа RTF
в файл OpenXML DOCX
используя якорь AltChunk
для внешнего содержимого. Элемент AltChunk
(w:altChunk
) указывает
место в вашем документе OpenPlayer 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. Для примера обратитесь к следующему fooobar.com/questions/204752/....
Когда вы сталкиваетесь с ошибкой "файл поврежден", убедитесь, что вы Dispose()
или Close()
WordprocessingDocument
. Если вы не закрываете() документ, то освобождение для w:altChunk
не сохраняется в файле Document.xml.rels.