Я подготовил шаблон документа MS Word и вставил закладки, в которые я хотел бы вставить текст.В настоящее время я могу вставить текст, но все родные стили исчезли (т.е. размер шрифта / стиль). Я ожидал, что стили будут унаследованы.
Я имел в виду этот вопрос для вдохновения, но я получаю искаженный XML:
<w:rFonts w:ascii="Playfair Display" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" />
Вот фрагмент закладки / начала, которой я являюсьработа с:
<?xml version="1.0" encoding="UTF-8"?>
<w:p xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" w:rsidR="00300E4C" w:rsidRDefault="00582F11">
<w:pPr>
<w:spacing w:before="265" />
<w:ind w:left="2822" w:right="1122" />
<w:jc w:val="center" />
<w:rPr>
<w:rFonts w:ascii="Playfair Display" />
<w:i />
<w:sz w:val="88" />
</w:rPr>
</w:pPr>
<w:bookmarkStart w:name="F_4000" w:id="0" />
<w:bookmarkEnd w:id="0" />
<w:r>
<w:rPr>
<w:rFonts w:ascii="Playfair Display" />
<w:i />
<w:color w:val="113628" />
<w:sz w:val="88" />
</w:rPr>
<w:t xml:space="preserve"> </w:t>
</w:r>
<w:bookmarkStart w:name="F_4002" w:id="1" />
<w:bookmarkEnd w:id="1" />
</w:p>
При использовании следующего кода:
IEnumerable<OpenXmlElement> elementsAfter = bookmark.ElementsAfter();
IEnumerable<OpenXmlElement> insideBookmark = elementsAfter.TakeWhile(element => !(element is BookmarkEnd));
foreach (OpenXmlElement element in insideBookmark)
{
element.RemoveAllChildren();
}
OpenXmlElement previousSibling = bookmark.PreviousSibling();
while (previousSibling is BookmarkStart || previousSibling is BookmarkEnd)
{
previousSibling = previousSibling.PreviousSibling();
}
//Get previous font.
var runProperties = previousSibling.GetFirstChild<ParagraphMarkRunProperties>().GetFirstChild<RunFonts>();
//var runProperties = previousSibling.GetFirstChild<RunProperties>(); - if its simple element.
// Clone.
var newProperty = (RunFonts)runProperties.Clone();
// Create container with properties
// This is where I run into malformed XML for newProperty
var container = new Run(text)
{
RunProperties = new RunProperties() { RunFonts = newProperty }
};
РЕДАКТИРОВАТЬ: после вставки некоторого текста в места закладки здесь находится XML (параграф XML, который содержит XML)
<w:p w:rsidR="00300E4C" w:rsidRDefault="00582F11" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:pPr>
<w:spacing w:before="265" />
<w:ind w:left="2822" w:right="1122" />
<w:jc w:val="center" />
<w:rPr>
<w:rFonts w:ascii="Playfair Display" />
<w:i />
<w:sz w:val="88" />
</w:rPr>
</w:pPr>
<w:r>
<w:t>First</w:t>
</w:r>
<w:bookmarkStart w:name="F_4000" w:id="0" />
<w:bookmarkEnd w:id="0" />
<w:r>
<w:rPr>
<w:rFonts w:ascii="Playfair Display" />
<w:i />
<w:color w:val="113628" />
<w:sz w:val="88" />
</w:rPr>
<w:t xml:space="preserve"> </w:t>
</w:r>
<w:r>
<w:t>Last</w:t>
</w:r>
<w:bookmarkStart w:name="F_4002" w:id="1" />
<w:bookmarkEnd w:id="1" />
</w:p>
Я просто пытаюсь получить нативный (уже активный) стиль, но я думаю, что закладка как-то его ломает.Любые предложения приветствуются.