5

我正在使用 C# 和 Open XML SDK 生成一个 word 文档。我想将某些段落及其包含页面的方向更改为横向,同时将其他段落保持为纵向。
我尝试了一些解决方案,但它们没有达到我想要的效果,而是所有页面的方向都更改为横向,除了第一个页面。这些解决方案包括:
- 将 SectionProperties 添加到我想要将其方向更改为横向的段落:

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


- 向主文档添加一个新的 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);

那么,有没有办法改变单个段落/页面的方向?

4

2 回答 2

7

您必须放置下一页分节符才能开始新的部分,并设置该部分的方向。完成后,使用默认页面方向开始一个新部分。

下一页分节符开始横向:

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 }))));
于 2013-03-27T18:41:23.853 回答
4

根据上面的对话和我的理解,代码可能如下所示。

在 Main 方法中调用子方法:

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

遵循子方法:

    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;
    }
于 2013-03-27T11:50:46.130 回答