2014-07-07 42 views
0

我合并了很少的docx文件,这些文件是通过C#使用openxml和wordml创建的。那些标题为标题1,标题2等的文件以及带有这些标签的一些文本。当单独创建这些文件时,如果我们点击或选择那些标题为1和标题2的文本,那么标题1,标题2等将变得突出显示,并且导航栏也显示在标题1,标题2标签上,但是在我们单击或选择这些文本时合并这些文档后,标题1和标题2未突出显示。在风格的功能区。这种合并的代码在这里给出,标题1,标题2没有在合并docx文件后的文档样式功能区中突出显示

 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; 
+0

对于两个不同的源文件,标题1的样式是否不同? – Steve

+0

对于两个不同的源文件,标题1的样式不同。 – user3812657

回答

0

通常,这种症状出现在样式定义不在styles.xml部分中时。如果在合并过程中文档内容被结转,但样式部分不是,那可能会导致此问题。

在新的Word文档中,只有很少的基本样式,例如Normal。样式定义(如标题1)不会添加到styles.xml,除非您将该样式分配给段落。当一个段落元素包含一个不包含在该包中的样式的样式分配时,该样式将被忽略。

它也可以出现在表格单元格中,其中表格设置重写样式。例如,在表格中,您可以说第一行(如标题)应该以特定的字体和颜色显示,并且会覆盖样式设置。

如果这两者都不起作用,如果您发布了少量生成的XML,则围绕其中一个段落及其直接上下文,这可能会提供一些线索。

+0

嗨scanny,谢谢你的建议,style.xml包含Heading1和Heading2样式,实际上在单个文档中没有这样的问题,Heading1和Heading2在它们中突出显示,但合并文档后出现此问题。那么,如果你有什么想法,你能提出一些建议吗? – user3812657

+0

增加了几个可能的回应。 – scanny

+0

嗨Scanny,感谢您的建议,现在问题已解决,我们添加了style.xml,同时合并不同部分,并且我们在OnOffValue中传递了错误值,语法是AltChunk altChunk = new AltChunk(new AltChunkProperties(new MatchSource {Val = new OnOffValue(false)})){Id = altChunkId}; – user3812657

相关问题