對於段落對象,我怎麼能確定在哪個頁面,這是使用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