Search code examples
ms-wordheadernpoi

I am getting multiple headers and footers in word document, getting null in policy.GetFirstPageHeader() using NPOI


I am getting multiple headers and footers in a Word document; I cannot differentiate the firstpage, default(odd), or even headers.

When I am trying to call policy.GetFirstPageHeader() I am getting a null value.

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();

I am getting null values. Can any one suggest how to differentiate headers in a Word document?


Solution

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