2014-07-07 41 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

相關問題