OpenXML:添加新段落时插入 lastRenderedPageBreak
OpenXML: lastRenderedPageBreak inserted when adding new paragraph
我用 OpenXML 添加一个新段落,如下所示:
var pSpacerAfterSectorTitle = insertNodeSectorsArea.AppendChild(GetNewParagraph("Arial", 12, true, false, null));
方法如下:
private static Paragraph GetNewParagraph(string fontName, int fontSize, bool useBold, bool useUnderline, string text)
{
var p = new Paragraph();
var pPr = p.AppendChild(new ParagraphProperties());
var rPrP = pPr.AppendChild(GetNewRunProperties(fontName, fontSize, useBold, useUnderline));
var r = p.AppendChild(new Run());
var rPr = r.AppendChild(GetNewRunProperties(fontName, fontSize, useBold, useUnderline));
if (!string.IsNullOrEmpty(text))
{
r.AppendChild(new Text() { Text = text,
Space = SpaceProcessingModeValues.Preserve });
}
return p;
}
}
和...
private static RunProperties GetNewRunProperties(string fontName, int fontSize, bool useBold, bool useUnderline)
{
string fontSizeVal = (fontSize * 2).ToString();
var runPr = new RunProperties();
runPr.AppendChild(new RunFonts() { ComplexScript = fontName });
if (useBold)
{
runPr.AppendChild(new Bold());
}
runPr.AppendChild(new FontSize() { Val = fontSizeVal });
runPr.AppendChild(new FontSizeComplexScript() { Val = fontSizeVal });
if (useUnderline)
{
runPr.AppendChild(new Underline() { Val = UnderlineValues.Single });
}
runPr.AppendChild(new Languages() { EastAsia = "de-CH" });
return runPr;
}
以这种方式添加段落时,我会突然在第一页上出现 lastRenderedPageBreak
,在我看来与我插入段落的位置无关的地方。
...<w:sz w:val="18"/><w:szCs w:val="18"/></w:rPr><w:lastRenderedPageBreak/><w:t>Sitzung 20171207 PSC 1</w:t></w:r></w:p>
如果我注释掉段落的添加,生成的文档不包含此分页符:
...<w:b/><w:sz w:val="18"/><w:szCs w:val="18"/></w:rPr><w:t>Sitzung 20171207 PSC 1</w:t></w:r></w:p>
我检查了我的代码很多次,但我没有手动创建这样的 lastRenderedPageBreak
- 所以我目前不知道它来自哪里。
有什么想法吗?
在 OOXML 中,w:lastRenderedPageBreak
旨在由对文档进行分页的最后一个软件插入,以标记其分页计算的结果。
所以,直接回答你的问题,w:lastRenderedPageBreak
是在你背后插入的,而不是你自己的代码。
您可以通过不进行分页的库在 MS Word 之外操作 OOXML 以避免此行为,但请注意,w:lastRenderedPageBreak
元素稍后可能会在下一次呈现和保存文档时插入分页软件。
另请注意,不幸的是 。
我用 OpenXML 添加一个新段落,如下所示:
var pSpacerAfterSectorTitle = insertNodeSectorsArea.AppendChild(GetNewParagraph("Arial", 12, true, false, null));
方法如下:
private static Paragraph GetNewParagraph(string fontName, int fontSize, bool useBold, bool useUnderline, string text)
{
var p = new Paragraph();
var pPr = p.AppendChild(new ParagraphProperties());
var rPrP = pPr.AppendChild(GetNewRunProperties(fontName, fontSize, useBold, useUnderline));
var r = p.AppendChild(new Run());
var rPr = r.AppendChild(GetNewRunProperties(fontName, fontSize, useBold, useUnderline));
if (!string.IsNullOrEmpty(text))
{
r.AppendChild(new Text() { Text = text,
Space = SpaceProcessingModeValues.Preserve });
}
return p;
}
}
和...
private static RunProperties GetNewRunProperties(string fontName, int fontSize, bool useBold, bool useUnderline)
{
string fontSizeVal = (fontSize * 2).ToString();
var runPr = new RunProperties();
runPr.AppendChild(new RunFonts() { ComplexScript = fontName });
if (useBold)
{
runPr.AppendChild(new Bold());
}
runPr.AppendChild(new FontSize() { Val = fontSizeVal });
runPr.AppendChild(new FontSizeComplexScript() { Val = fontSizeVal });
if (useUnderline)
{
runPr.AppendChild(new Underline() { Val = UnderlineValues.Single });
}
runPr.AppendChild(new Languages() { EastAsia = "de-CH" });
return runPr;
}
以这种方式添加段落时,我会突然在第一页上出现 lastRenderedPageBreak
,在我看来与我插入段落的位置无关的地方。
...<w:sz w:val="18"/><w:szCs w:val="18"/></w:rPr><w:lastRenderedPageBreak/><w:t>Sitzung 20171207 PSC 1</w:t></w:r></w:p>
如果我注释掉段落的添加,生成的文档不包含此分页符:
...<w:b/><w:sz w:val="18"/><w:szCs w:val="18"/></w:rPr><w:t>Sitzung 20171207 PSC 1</w:t></w:r></w:p>
我检查了我的代码很多次,但我没有手动创建这样的 lastRenderedPageBreak
- 所以我目前不知道它来自哪里。
有什么想法吗?
在 OOXML 中,w:lastRenderedPageBreak
旨在由对文档进行分页的最后一个软件插入,以标记其分页计算的结果。
所以,直接回答你的问题,w:lastRenderedPageBreak
是在你背后插入的,而不是你自己的代码。
您可以通过不进行分页的库在 MS Word 之外操作 OOXML 以避免此行为,但请注意,w:lastRenderedPageBreak
元素稍后可能会在下一次呈现和保存文档时插入分页软件。
另请注意,不幸的是