如何找到使用的OpenXML段落中的页码?(How to find the page number

2019-08-17 01:20发布

对于一个段落对象,我怎么能确定在哪个页面,这是使用Open XML SDK 2.0的Microsoft Office位于何处?

Answer 1:

这是不可能得到页码使用Word文档OpanXml Sdk ,因为这是由客户端(如MS Word)中处理。

然而,如果你有预先由单词客户端打开并保存后工作文件,然后在客户端将增加LastRenderedPageBreak识别分页符。 请参阅我的答案在这里有关更多信息LastRenderedPageBreak秒。 这使您能够为数量计数LastRenderedPageBreak元素的段落之前得到当前页数。

如果不是,则情况诺迪选项,以解决您的要求是,以添加页码脚注(可能是相同的颜色作为你的文件实际上隐藏了!)。 只有一种选择-如果你正在使用自动化Word文档生成OpenXML sdk



Answer 2:

@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);
    }
}


Answer 3:

下面是我为做一个扩展方法:

    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;
    }


文章来源: How to find the page number from a paragraph using OpenXML?