合并docx文件后,标题1、标题2没有在样式带中突出显示
本文关键字:标题 样式 显示 文件 docx 合并 | 更新日期: 2023-09-27 18:11:51
我正在合并一些docx文件,这些文件是通过c#使用openxml和wordml创建的。那些有标题标签的文件,如标题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;
通常,当样式定义不存在于styles.xml部分时,就会出现这种症状。如果在合并过程中保留了文档内容,但没有保留样式部分,则可能导致此问题。
在一个新的Word文档中,只有很少的基本样式,比如Normal。像Heading 1这样的样式定义不会添加到styles.xml中,直到将该样式分配给段落。当一个段落元素包含包中不存在的样式的样式分配时,该样式将被忽略。
它也可能出现在表格单元格中,其中表格设置覆盖了样式。例如,在表格中,您可以说第一行(像标题一样)应该以特定的字体和颜色显示,这将覆盖样式设置。
如果这两种方法都不起作用,如果您在其中一个段落及其直接上下文周围发布生成的少量XML,可能会提供一些线索。