2013-03-27 12 views
5

私はC#とOpen XML SDKを使って単語文書を生成しています。私は、いくつかの段落の向きとそのページを横向きに変更し、他の段落を縦向きにしたいと思います。
私はいくつかのソリューションを試しましたが、私が探していたものを達成せず、代わりにすべてのページの向きが最初のものを除いてランドスケープに変更されました。これらのソリューションは、次のとおりです。
を - 私が風景に その向きを変更したい段落にSectionPropertiesを追加:Open XMLとC#を使用して単一段落またはページの向きを変更する方法は?

WordprocessingDocument WordDocument = WordprocessingDocument.Open(ReportFile, true) 
Paragraph paragraph = new Paragraph(new ParagraphProperties(
       new SectionProperties(new PageSize() 
       { Width = (UInt32Value)15840U, Height = (UInt32Value)12240U, Orient = PageOrientationValues.Landscape }))); 
WordDocument.MainDocumentPart.Document.Body.Append(paragraph); 


- メイン文書に新しいボディを追加し、それに段落を追加:

WordprocessingDocument WordDocument = WordprocessingDocument.Open(ReportFile, true)  
Body body = new Body();   
Paragraph paragraph = new Paragraph(new ParagraphProperties(
       new SectionProperties(new PageSize() 
       { Width = (UInt32Value)15840U, Height = (UInt32Value)12240U, Orient = PageOrientationValues.Landscape }))); 
body.Append(paragraph); 
WordDocument.MainDocumentPart.Document.Append(body); 


- メイン文書に新しいボディを追加し、それに直接SectionProprtiesを追加:

WordprocessingDocument WordDocument = WordprocessingDocument.Open(ReportFile, true) 
Body body = new Body(); 
Paragraph paragraph = new Paragraph(); 
SectionProperties sectionProp = new SectionProperties(new PageSize() { Width = (UInt32Value)15840U, Height = (UInt32Value)12240U, Orient = PageOrientationValues.Landscape }); 
body.Append(paragraph); 
body.Append(sectionProp); 
WordDocument.MainDocumentPart.Document.Append(body); 

したがって、段落/ページの向きを変更する方法はありますか?

+0

あなたがMSを使用して、単一の段落の向きを変えることができる場合、私は、疑いますOffice Word(アプリケーション)自体? –

+0

カスタムマージンを使用してMS Office Wordで実行できます。このリンクを確認してください。http://www.officetooltips.com/word/tips/how_to_use_different_page_orientations_inside_one_document.html –

+0

OKチェックしました。ただし、選択したテキストの前後にセクション区切りを挿入します。たとえば、ある風景を含む3つの段落とポートレートモードの他の段落は、3ページの文書を作成します。これは、あなたの望むことですか? –

答えて

7

  using (WordprocessingDocument package = WordprocessingDocument.Create(filePath, WordprocessingDocumentType.Document)) 
      { 
       package.AddMainDocumentPart(); 
       package.MainDocumentPart.Document = new Document(); 
       Body body = package.MainDocumentPart.Document.Body = new Body(); 

       Paragraph para1 = CreatePara1(); // Paragraph 1 Portrait 

       Paragraph breakBefore = CreateBreakBefore(); // Break before next paragraph that would be landscape 

       Paragraph para2 = CreatePara2(); // Paragraph 2 Landscape 

       Paragraph breakAfter = CreateBreakAfter(); // Break after previous paragraph that was landscape 

       Paragraph para3 = CreatePara3(); // Paragraph 3 Portrait again 

       body.Append(para1); 
       body.Append(breakBefore); 
       body.Append(para2); 
       body.Append(breakAfter); 
       body.Append(para3); 
      } 

サブ方法に従います。セクション。完了したら、デフォルトのページ方向で新しいセクションを開始します。

横向き開始する次のページセクション区切り:縦向きを開始する

doc.MainDocumentPart.Document.Body.Append(
    new Paragraph(
     new ParagraphProperties(
      new SectionProperties(
       new PageSize() { Width = (UInt32Value)12240U, Height = (UInt32Value)15840U, Orient = PageOrientationValues.Landscape }, 
       new PageMargin() { Top = 720, Right = Convert.ToUInt32(rightmargin * 1440.0), Bottom = 360, Left = Convert.ToUInt32(leftmargin * 1440.0), Header = (UInt32Value)450U, Footer = (UInt32Value)720U, Gutter = (UInt32Value)0U })))); 

次のページセクション区切りを:

doc.MainDocumentPart.Document.Body.Append(
    new Paragraph(
     new ParagraphProperties(
      new SectionProperties(
       new PageSize() { Width = (UInt32Value)12240U, Height = (UInt32Value)15840U }, 
       new PageMargin() { Top = 720, Right = Convert.ToUInt32(rightmargin * 1440.0), Bottom = 360, Left = Convert.ToUInt32(leftmargin * 1440.0), Header = (UInt32Value)450U, Footer = (UInt32Value)720U, Gutter = (UInt32Value)0U })))); 
3

上記の会話と私の理解に基づいて、コードは以下のようになります。 Mainメソッドの呼び出しサブ方法で

:あなたは、新しいセクションを開始するために、次のページのセクション区切りを入れて、そしてそのための方向性を設定する必要が

private static Paragraph CreatePara1() 
    { 
     Paragraph para1 = new Paragraph(); 
     Run run1 = new Run(new Text("This is Paragraph one.")); 
     para1.Append(run1); 
     return para1; 
    } 

    private static Paragraph CreateBreakBefore() 
    { 
     Paragraph paragraph2 = new Paragraph() { RsidParagraphAddition = "00BA2F0F", RsidParagraphProperties = "00BA2F0F", RsidRunAdditionDefault = "00BA2F0F" }; 

     ParagraphProperties paragraphProperties1 = new ParagraphProperties(); 

     SectionProperties sectionProperties1 = new SectionProperties() { RsidR = "00BA2F0F" }; 
     PageSize pageSize1 = new PageSize() { Width = (UInt32Value)12240U, Height = (UInt32Value)15840U }; 
     PageMargin pageMargin1 = new PageMargin() { Top = 1440, Right = (UInt32Value)1440U, Bottom = 1440, Left = (UInt32Value)1440U, Header = (UInt32Value)720U, Footer = (UInt32Value)720U, Gutter = (UInt32Value)0U }; 
     Columns columns1 = new Columns() { Space = "720" }; 
     DocGrid docGrid1 = new DocGrid() { LinePitch = 360 }; 

     sectionProperties1.Append(pageSize1); 
     sectionProperties1.Append(pageMargin1); 
     sectionProperties1.Append(columns1); 
     sectionProperties1.Append(docGrid1); 

     paragraphProperties1.Append(sectionProperties1); 

     paragraph2.Append(paragraphProperties1); 
     return paragraph2; 
    } 

    private static Paragraph CreatePara2() 
    { 
     Paragraph para2 = new Paragraph() { RsidParagraphAddition = "00BA2F0F", RsidParagraphProperties = "00BA2F0F", RsidRunAdditionDefault = "00BA2F0F" }; 
     BookmarkStart bookmarkStart1 = new BookmarkStart() { Name = "_GoBack", Id = "0" }; 

     Run run2 = new Run(); 
     LastRenderedPageBreak lastRenderedPageBreak1 = new LastRenderedPageBreak(); 
     Text text2 = new Text(); 
     text2.Text = "This is the paragraph two"; 

     run2.Append(lastRenderedPageBreak1); 
     run2.Append(text2); 

     para2.Append(bookmarkStart1); 
     para2.Append(run2); 
     BookmarkEnd bookmarkEnd1 = new BookmarkEnd() { Id = "0" }; 
     return para2; 
    } 

    private static Paragraph CreateBreakAfter() 
    { 
     Paragraph paragraph4 = new Paragraph() { RsidParagraphAddition = "00BA2F0F", RsidParagraphProperties = "00BA2F0F", RsidRunAdditionDefault = "00BA2F0F" }; 

     ParagraphProperties paragraphProperties2 = new ParagraphProperties(); 

     SectionProperties sectionProperties2 = new SectionProperties() { RsidR = "00BA2F0F", RsidSect = "00BA2F0F" }; 
     PageSize pageSize2 = new PageSize() { Width = (UInt32Value)15840U, Height = (UInt32Value)12240U, Orient = PageOrientationValues.Landscape }; 
     PageMargin pageMargin2 = new PageMargin() { Top = 1440, Right = (UInt32Value)1440U, Bottom = 1440, Left = (UInt32Value)1440U, Header = (UInt32Value)720U, Footer = (UInt32Value)720U, Gutter = (UInt32Value)0U }; 
     Columns columns2 = new Columns() { Space = "720" }; 
     DocGrid docGrid2 = new DocGrid() { LinePitch = 360 }; 

     sectionProperties2.Append(pageSize2); 
     sectionProperties2.Append(pageMargin2); 
     sectionProperties2.Append(columns2); 
     sectionProperties2.Append(docGrid2); 

     paragraphProperties2.Append(sectionProperties2); 

     paragraph4.Append(paragraphProperties2); 
     return paragraph4; 
    } 

    private static Paragraph CreatePara3() 
    { 
     Paragraph para3 = new Paragraph(); 
     Run run3 = new Run(new Text("This is Paragraph three.")); 
     para3.Append(run3); 
     return para3; 
    } 
+1

上記のサンプルコードは、CreateBreakAfter()メソッドで横向きを割り当てます。最初に段落が追加された後、直後に別の段落に方向が設定されます。他の人を助けることは明らかです。 –

関連する問題