使用OpenXml创建页面分隔符。

38
我使用OpenXml创建包含简单文本和一些表格的Word文档。如何强制使带有此文本的段落始终显示在新页面上?也许这个段落应该是某个标题,但我不确定如何做到这一点。
谢谢。
2个回答

54

您可以使用<w:br>元素在运行元素内创建分页符。在原始的OpenXML中,它可能看起来像这样:

<w:p>
  <w:r>
    <w:br w:type="page" />
  </w:r>
</w:p>

如果您正在使用OpenXml SDK,您可以使用

new Paragraph(
  new Run(
    new Break(){ Type = BreakValues.Page }));

编辑:

如果你只是想指定一个段落是页面上的最后一件事,你可以尝试使用<w:lastRenderedPageBreak />标签。

new Paragraph(
   new Run(
      new LastRenderedPageBreak(),
      new Text("Last text on the page")));

1
我尝试了这个解决方案,但是如果我的页面断点之前有一些数据填充到了上一页,就会出现问题。Word 会添加页面断点,然后我的代码又创建了一个页面断点,导致出现了一个空白页。:/ 我不确定该如何改变这种情况 :/ - arek
2
这个答案中关于 w:br/@w:type="page" 的部分是正确的,但关于 w:lastRenderedPageBreak 的部分是错误的。只有已确定渲染页面断点位置的处理器才应该插入 w:lastRenderedPageBreak;它并不指定页面断点应该出现在哪里。 - kjhughes

14

使用PageBreakBefore属性可以实现这一点。 如果Word没有自动插入页面分隔符,则会在段落之前插入一个页面分隔符。

if (myParagraph.ParagraphProperties== null) 
{ 
    myParagraph.ParagraphProperties = new ParagraphProperties();
}

myParagraph.ParagraphProperties.PageBreakBefore = new PageBreakBefore();

我认为在Open XML中它看起来像这样:

  <w:p>
    <w:pPr>
      ...
      <w:pageBreakBefore/>   
      ...
    </w:pPr>
    ...    
  </w:p>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接