Заголовок 1, заголовок 2 не выделяется на ленте стиля документа после объединения файла docx
Я объединяю несколько файлов docx, эти файлы были созданы с использованием openxml и wordml через C#. Эти файлы имеют тег заголовка 1, заголовок 2 и т. Д. Вместе с текстом с этими тегами. Когда эти файлы создаются индивидуально, тогда, если мы щелкнем или выделим текст, который помечен заголовком 1 и заголовком 2, тогда будут выделены заголовок 1, заголовок 2 и т. Д., И панель навигации также будет отображаться на фоне тегов заголовка 1, заголовка 2., но после объединения этих документов, когда мы щелкаем или выделяем этот текст, заголовок 1 и заголовок 2 не выделяются. в стиле ленты. Код для этого слияния приведен здесь,
MemoryStream ms = new MemoryStream();
using (WordprocessingDocument myDoc =
WordprocessingDocument.Create(ms, WordprocessingDocumentType.Document))
{
MainDocumentPart mainPart = myDoc.AddMainDocumentPart();
mainPart.Document = new Document { Body = new Body() };
int counter = 1;
foreach (var sectionOutput in sectionOutputs)
{
foreach (var outputFile in sectionOutput.Files)
{
Paragraph sectionBreakPara = null;
if (!sectionOutput.SectionType.Equals(sectionOutputs[sectionOutputs.Count - 1].SectionType))
{
if (outputFile == sectionOutput.Files.Last())
//check whether this is the last file in this section
{
using (
WordprocessingDocument pkgSourceDoc =
WordprocessingDocument.Open(outputFile.OutputStream, true))
{
var sourceBody = pkgSourceDoc.MainDocumentPart.Document.Body;
SectionProperties docSectionBreak =
sourceBody.Descendants<SectionProperties>().LastOrDefault();
if (docSectionBreak != null)
{
var clonedSectionBreak = (SectionProperties)docSectionBreak.CloneNode(true);
clonedSectionBreak.RemoveAllChildren<FooterReference>();
clonedSectionBreak.RemoveAllChildren<HeaderReference>();
sectionBreakPara = new Paragraph();
ParagraphProperties sectionParaProp = new ParagraphProperties();
sectionParaProp.AppendChild(clonedSectionBreak);
sectionBreakPara.AppendChild(sectionParaProp);
}
}
}
}
string altChunkId = string.Format("altchunkId{0}", counter);
AlternativeFormatImportPart chunk = mainPart.AddAlternativeFormatImportPart(
AlternativeFormatImportPartType.WordprocessingML, altChunkId);
outputFile.OutputStream.Seek(0, SeekOrigin.Begin);
chunk.FeedData(outputFile.OutputStream);
AltChunk altChunk = new AltChunk(new AltChunkProperties(new MatchSource { Val = new OnOffValue(true) })) { Id = altChunkId };
mainPart.Document.Body.AppendChild(altChunk);
if (sectionBreakPara != null)
{
mainPart.Document
.Body
.AppendChild(sectionBreakPara);
}
counter++;
}
}
mainPart.Document.Save();
}
return ms;
1 ответ
В общем, этот симптом возникает, когда определение стиля отсутствует в части styles.xml. Если во время процесса слияния содержимое документа переносится, а части стилей - нет, это может вызвать эту проблему.
В новом документе Word только несколько базовых стилей, таких как Normal. Определение стиля, такого как заголовок 1, не добавляется в файл styles.xml до тех пор, пока вы не назначите этот стиль абзацу. Когда элемент абзаца содержит назначение стиля для стиля, отсутствующего в пакете, стиль игнорируется.
Это также может возникнуть в ячейках таблицы, где настройка таблицы переопределяет стиль. Например, в таблице можно сказать, что первая строка (например, заголовки) должна отображаться с определенным шрифтом и цветом, и это заменит настройку стиля.
Если ни одна из этих работ не работает, если вы публикуете небольшое количество сгенерированного XML, прямо вокруг одного из абзацев и его непосредственного контекста, это может дать некоторые подсказки.