首页 > 解决方案 > 我在 word 文档中得到多个页眉和页脚,使用 NPOI 在 policy.GetFirstPageHeader() 中获取 null

问题描述

我在 Word 文档中有多个页眉和页脚;我无法区分首页、默认(奇数)甚至标题。

当我试图打电话policy.GetFirstPageHeader()时,我得到一个空值。

XWPFHeaderFooterPolicy policy = new XWPFHeaderFooterPolicy(document);

var headerList = document.HeaderList;
var footerList = document.FooterList;

var firstPageHeader = policy.GetFirstPageHeader();
var firstPageFooter = policy.GetFirstPageFooter();

XWPFHeader header = policy.GetDefaultHeader();
XWPFHeader even = policy.GetEvenPageHeader();
XWPFHeader odd = policy.GetOddPageHeader();

我得到空值。任何人都可以建议如何区分 Word 文档中的标题吗?

标签: ms-wordheadernpoi

解决方案


var listOfheaders = new List<CT_HdrFtrRef>();
foreach (var par in document.Paragraphs)
{
var ParagraphsectPr = (CT_P)par.GetType().GetField("paragraph", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(par);

 if (ParagraphsectPr.pPr.sectPr != null)
{
foreach (var headerref in ParagraphsectPr.pPr.sectPr.headerReference)
 {
   listOfheaders.Add(headerref);
 }
 }
}

                foreach (var list in listOfheaders)
                {                    
                    var relatedPart = document.GetRelationById(list.id);
                    XWPFHeader hdr = null;
                    if (relatedPart != null && relatedPart is XWPFHeader)
                    {
                        hdr = (XWPFHeader)relatedPart;
                    }
                    // Assign it
                    ST_HdrFtr type = list.type;
                    if (!string.IsNullOrEmpty(hdr.Text))
                    {
                        if (type == ST_HdrFtr.first)
                        {
                            firstPageHeadr = hdr;
                        }
                        else if (type == ST_HdrFtr.even)
                        {
                            evenPageHeader = hdr;
                        }
                        else
                        {
                            defaultHeader = hdr;
                        }
                    }                   
                }

推荐阅读