對於段落對象,我怎麼能確定在哪個頁面,這是使用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
- 4. C#openxml刪除段落
- 5. 如何在段落中找到模式### _____ ###
- 6. 如何找到無段落Python中
- 7. 如何從段落或一堆段落中找到標題案例短語
- 8. OpenXml - 在段落中查找第一個Run元素的索引
- 9. 如何找到OpenXML的
- 10. 如何判斷OpenXML中段落的高度?
- 11. 將現有樣式添加到OpenXML中的段落中
- 12. 如何從段落
- 13. 如何使用Wordpress中的段落?
- 14. 如何使用Java代碼查看JTextPane中的段落符號?
- 15. OpenXML如何爲每個段落插入一個「ID」?
- 16. C#中的Openxml只更新段落中的第一個MERGEFIELD
- 17. Selenium代碼找到一個段落中的字數
- 18. 如何從java中的段落中找到多組特定單詞?
- 19. 如何用Python`string.find()`找到段落的邊界?
- 20. 如何在使用OpenXML通過c#代碼編輯word文檔文件時將樣式應用於段落?
- 21. Nokogiri在段落中找到文本
- 22. 如何從使用JSoup的網站中提取段落?
- 23. 用JavaScript查找段落中的字數
- 24. 如何使用OPENXML
- 25. 使用OpenXML從Excel中刪除公式使用OpenXML的
- 26. 如何在java中使用openCv找到矩形的角落
- 27. 如何從FlowDocument中獲取段落
- 28. 如何使段落出現在使用WordPress的頁面中的某個區域?
- 29. 如何使用vim從文本中提取特定段落?
- 30. 如何使用simple_html_dom.php從HTML文件中刪除空段落?
不錯。我應該在我的答案,如果你提供你的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