2013-03-27 8 views
5

Sto generando un documento word utilizzando C# e Open XML SDK. Voglio cambiare l'orientamento di alcuni paragrafi e le loro pagine di contenimento in orizzontale mantenendo gli altri in orientamento verticale.
Ho provato alcune soluzioni, ma non hanno ottenuto quello che sto cercando e invece l'orientamento di tutte le pagine è stato modificato in orizzontale tranne il primo. Queste soluzioni includono:
- Aggiunta SectionProperties al paragrafo che voglio cambiare il suo orientamento al paesaggio:Come modificare l'orientamento di un singolo paragrafo o pagina usando Open XML e 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); 


- Aggiunta di un nuovo corpo al documento principale e aggiungendo il paragrafo ad esso:

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); 


- Aggiunta di un nuovo corpo al documento principale e aggiungendo SectionProprties ad esso direttamente:

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); 

Quindi, c'è un modo per cambiare l'orientamento di un singolo paragrafo/pagina?

+0

dubito, se è possibile modificare l'orientamento di un singolo paragrafo utilizzando MS Office Word (applicazione) stesso? –

+0

Puoi farlo in MS Office Word usando i margini personalizzati. Controlla questo link http://www.officetooltips.com/word/tips/how_to_use_different_page_orientations_inside_one_document.html –

+0

OK Ho controllato. Ma inserisce anche le interruzioni di sezione prima e dopo il testo selezionato. Quindi, ad esempio, 3 paragrafi con un paesaggio e altri in modalità verticale verranno visualizzati su 3 pagine del documento. È questo che vuoi? –

risposta

7

Dovete mettere una prossima interruzione di sezione pagina per iniziare una nuova sezione, e impostare l'orientamento per quella sezione. Al termine, avvia una nuova sezione con l'orientamento della pagina predefinito.

Pagina successiva interruzione di sezione per iniziare orientamento orizzontale:

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 })))); 

Pagina successiva interruzione di sezione per iniziare orientamento verticale:

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

In base alla conversazione sopra riportata e alla mia comprensione, il codice potrebbe essere simile a quello riportato di seguito.

Nel metodo Main chiamando i metodi secondari:

  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); 
      } 

segue il metodo sub:

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

Il codice di esempio sopra assegna l'orientamento orizzontale nel metodo CreateBreakAfter(). Quindi prima viene aggiunto il paragrafo, quindi l'orientamento viene impostato in un altro paragrafo subito dopo. Giusto per essere chiari per aiutare gli altri. –

Problemi correlati