对于段落对象,我怎么能确定在哪个页面,这是使用Open XML SDK 2.0的Microsoft Office位于何处?如何从使用OpenXML的段落中找到页码?
4
A
回答
5
这是不可能得到页码使用OpanXml Sdk
,因为这是由客户端(如MS Word)中处理的Word文档。
然而,如果你有预先由单词客户端打开并保存后工作文件,然后在客户端将增加LastRenderedPageBreak
识别分页符。有关LastRenderedPageBreak
s的更多信息,请参阅我的回答here。这使您可以在段落之前计算LastRenderedPageBreak
元素的数量以获取当前页数。
如果不是,则情况诺迪选项,以解决您的要求是,以添加页码脚注(可能是相同的颜色作为你的文件实际上隐藏了!)。只有一个选项 - 如果您使用OpenXML sdk
自动生成Word文档。
1
@Flowerking:谢谢你提供的信息。
因为我需要循环反正所有的段落来搜索特定字符串,我可以使用下面的代码查找页码:
using (var document = WordprocessingDocument.Open(@"c:\test.docx", false))
{
var paragraphInfos = new List<ParagraphInfo>();
var paragraphs = document.MainDocumentPart.Document.Descendants<Paragraph>();
int pageIdx = 1;
foreach (var paragraph in paragraphs)
{
var run = paragraph.GetFirstChild<Run>();
if (run != null)
{
var lastRenderedPageBreak = run.GetFirstChild<LastRenderedPageBreak>();
var pageBreak = run.GetFirstChild<Break>();
if (lastRenderedPageBreak != null || pageBreak != null)
{
pageIdx++;
}
}
var info = new ParagraphInfo
{
Paragraph = paragraph,
PageNumber = pageIdx
};
paragraphInfos.Add(info);
}
foreach (var info in paragraphInfos)
{
Console.WriteLine("Page {0}/{1} : '{2}'", info.PageNumber, pageIdx, info.Paragraph.InnerText);
}
}
0
这是我该做的扩展方法:
public static int GetPageNumber(this OpenXmlElement elem, OpenXmlElement root)
{
int pageNbr = 1;
var tmpElem = elem;
while (tmpElem != root)
{
var sibling = tmpElem.PreviousSibling();
while (sibling != null)
{
pageNbr += sibling.Descendants<LastRenderedPageBreak>().Count();
sibling = sibling.PreviousSibling();
}
tmpElem = tmpElem.Parent;
}
return pageNbr;
}
相关问题
- 1. 如何找到Word段落的页码?
- 2. OpenXml - 如何识别段落是否延伸到下一页
- 3. 使用OpenXML SDK 2.0从.docx中删除空的段落
- 4. 如何使用OpenXML替换段落的文本Sdk
- 5. 如何使用OpenXml将新书签附加到word 2010中的现有段落?
- 6. C#openxml删除段落
- 7. 如何找到无段落Python中
- 8. 如何在段落中找到模式### _____ ###
- 9. 如何从段落或一堆段落中找到标题案例短语
- 10. OpenXml - 在段落中查找第一个Run元素的索引
- 11. 使用OpenXml SDK 2.0克隆Word中的段落属性
- 12. 如何找到OpenXML的
- 13. 如何判断OpenXML中段落的高度?
- 14. 将现有样式添加到OpenXML中的段落中
- 15. 如何从段落
- 16. 如何从段落
- 17. 如何在OpenXML中使用格式保留字符串段落,运行,文本?
- 18. 如何使用ASPOSE.DLL重复段落中的段落
- 19. 如何从Excel中使用的OpenXML
- 20. 需要使用openxml修改段落的innerxml 2.5
- 21. 如何使用Wordpress中的段落?
- 22. 使用下面的代码片段找不到来自OpenXML附加文档
- 23. 如何防止在使用OpenXML插入段落后出现新行?
- 24. 如何使用Java代码查看JTextPane中的段落符号?
- 25. OpenXML如何为每个段落插入一个“ID”?
- 26. C#中的Openxml只更新段落中的第一个MERGEFIELD
- 27. Selenium代码找到一个段落中的字数
- 28. 查找段落
- 29. 查找段落
- 30. 如何从java中的段落中找到多组特定单词?
不错。我应该在我的答案,如果你提供你的Q. 一个catch一些代码来提供类似的代码=>'变种分页符= run.GetFirstChild();'在开放式XML - 并非所有'Break's是pagebreaks! –
Flowerking
2013-02-18 20:55:14
**对于所有未来的访问者,op认为这回答了他的问题。但它在很多情况下都失败了。当您使用多列布局时,它会失败。另外'run.GetFirstChild();'会给你各种各样的休息,其中可能包括除了分页符之外的休息。所以在使用上面的代码时请记住这些要点。** –
Flowerking
2013-02-24 22:07:12
doc你有LastRenderedPageBreak的文档也会有Break,所以只需使用Break检查就可以了。但有些情况下,不会有任何突破,但内容可以扩展到多个页面,您如何通过页面识别和分离内容? – HaBo 2016-10-13 11:23:22