У меня есть шаблон docx с метками, которые я заменяю html-кодом.
Например вместо метки [summary] я вставляю такой html-код: <p>test paragraph</p>
Делаю я это так:
...
var htmlAsUtf8Bytes = Encoding.Default.GetBytes(replaceText);
string partId = "id_" + random.Next();
AlternativeFormatImportPart formatImportPart = mainDocumentPart.AddAlternativeFormatImportPart(
AlternativeFormatImportPartType.Html, partId);
formatImportPart.FeedData(new MemoryStream(htmlAsUtf8Bytes));
AltChunk altChunk = new AltChunk { Id = partId };
paragraph.InsertBeforeSelf(altChunk);
paragraph.Remove();
...
Все работает. Но когда открываешь файл в MS Word, то к замененным частям документа не применяются стили (такие как: Обычный, Заголовок, Строгий, Без интервала и т.д.) Хотя в остальных частях документа (которые не заменялись) стиль - Обычный.
Я отображаю этот документ в HTML5 Document Viewer Control - Gnostice
Части, к которым не был применен стиль вообще не отображаются в этом редакторе. Если вручную задать стили через MS Word то редактор их отображает.
Как с помощью OpenXML задавать стили к вставляемому html?
[edit]
Пытаюсь сделать так:
StyleDefinitionsPart part = mainDocumentPart.StyleDefinitionsPart;
DocumentFormat.OpenXml.Wordprocessing.Style style = new DocumentFormat.OpenXml.Wordprocessing.Style()
{
Type = StyleValues.Paragraph,
StyleId = "Heading1",
BasedOn = new BasedOn() { Val = "Normal" },
NextParagraphStyle = new NextParagraphStyle() { Val = "Normal" }
};
StyleName styleName1 = new StyleName() { Val = "heading 1" };
style.Append(styleName1);
style.Append(new PrimaryStyle());
StyleRunProperties styleRunProperties1 = new StyleRunProperties();
styleRunProperties1.Append(new DocumentFormat.OpenXml.Wordprocessing.Bold());
styleRunProperties1.Append(new RunFonts()
{
ComplexScriptTheme = ThemeFontValues.MajorBidi,
HighAnsiTheme = ThemeFontValues.MajorHighAnsi,
EastAsiaTheme = ThemeFontValues.MajorEastAsia,
AsciiTheme = ThemeFontValues.MajorAscii
});
styleRunProperties1.Append(new DocumentFormat.OpenXml.Wordprocessing.FontSize() { Val = "28" });
styleRunProperties1.Color = new DocumentFormat.OpenXml.Wordprocessing.Color()
{
Val = "365F91",
ThemeShade = "BF",
ThemeColor = ThemeColorValues.Accent1
};
style.Append(styleRunProperties1);
part.Styles.Append(style);
ParagraphProperties pPr = new ParagraphProperties();
ParagraphStyleId paragraphStyleId1 = new ParagraphStyleId() { Val = "Heading1" };
pPr.Append(paragraphStyleId1);
Потом так:
paragraph.Append(pPr);
paragraph.InsertBeforeSelf(altChunk);
paragraph.Remove();
Но на InsertBeforeSelf происходит исключение:
Additional information: Cannot insert the OpenXmlElement "newChild" because it is part of a tree.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости