IronPdf trying to add a footer fixed to the bottom of each created page

39 Views Asked by At

Im trying to add a footer / ( aswell as a logo ) for each created page in my created PDF

So I have this :

(pdf utility)

        private int currentPageNumber = 2;
        public event Action<IronPdfUtil> OnNewPageAdded;
        public event Action<IronPdfUtil, int> OnNewPageEnded;


  public void AddPageElement(string name, string content, string id = "", string css = "")
  {
      XElement element = new XElement(name, content);

      if (id != "")
      {
          element.SetAttributeValue("id", id);
      }

      if (css != "")
      {
          element.SetAttributeValue("style", css);
      }

      InsertElementAtTheEnd(element);
  }


        public void AddNewPageToPDF()
        {
            AddPageElement("div", "", "PageBreak", "clear: both;  page-break-after: always");
            OnNewPageAdded?.Invoke(this);
        }

        public void TriggerOnPageEnded()
        {
            OnNewPageEnded?.Invoke(this, currentPageNumber);
            currentPageNumber++;
        }  

the methods themselves

  private void GenerateHeader(IronPdfUtil pdfUtil)
  {
      // Create a container div element to hold both images
      XElement containerDiv = new XElement("div");

      // Add the first image to the container div
      XElement imageElement1 = pdfUtil.AddImage("pdf/images/img/logo2.jpg", "max-width: 50%; max-height: 50%;");
      containerDiv.Add(imageElement1);

      // Add the second image to the container div
      XElement imageElement2 = pdfUtil.AddImage("pdf/images/img/logo3.png", "max-height: 15px;");
      containerDiv.Add(imageElement2);

      // Insert the container div into the PDF
      pdfUtil.InsertElementAtTheEnd(containerDiv);
  }

(note this is first page , manually creating the footer since I already know what elements will be in that page)

 private void AddFooterFirstPage(IronPdfUtil pdfUtil, string carNumber, string queryDate)
 {
     Font regularFont = PdfUtil.generateFont(PdfUtil.GetFont(), 9f, Font.BOLD);
     var text = Properties.Resources.sheiltaLerechv + carNumber + " " + Properties.Resources.mtaarich + queryDate + " " + Properties.Resources.anmod + " " + 1;
     
     // Define the footer HTML with inline CSS for center alignment
     var footerHtml = $"<div style='margin-top: 550px; width: 100%; text-align: center; font-weight: bold; font-family: david; font-size: {regularFont.Size}pt;'>{text}</div>";
     
     // Insert the footer HTML into the PDF as HTML content
     pdfUtil.InsertElementAtTheEnd(XElement.Parse(footerHtml));
 }


// that one is from page 2 onward ( or atleast what id like it to be )
   private void AddFooterNextPages(IronPdfUtil pdfUtil, int pageNumber, string carNumber, string queryDate)
        {
            Font regularFont = PdfUtil.generateFont(PdfUtil.GetFont(), 9f, Font.BOLD);
            
            var text = Properties.Resources.sheiltaLerechv + carNumber + " " + Properties.Resources.mtaarich + queryDate + " " + Properties.Resources.anmod + " " + pageNumber;
 var footerHtml = $"<div style='position: absolute; bottom: 20px; width: 100%; text-align: center; font-weight: bold; font-family: david; font-size: {regularFont.Size}pt;'>{text}</div>";
          pdfUtil.InsertElementAtTheEnd(XElement.Parse(footerHtml));
        }

main method: so main method builds the first page manually, then pdfUtil.AddNewPageToPDF(); pdfUtil.TriggerOnPageEnded();

should both trigger differnet methods

private void PdfUtil_OnNewPageAdded(IronPdfUtil pdfUtil)
  {
      GenerateHeader(pdfUtil);
  }

  private void PdfUtil_OnNewPageEnded(IronPdfUtil pdfUtil, int pageNumber, string carNumber, string queryDate)
  {
      if (pageNumber > 1)
      {
          // This method call is for adding the footer to the second page specifically
          AddFooterNextPages(pdfUtil, pageNumber, carNumber, queryDate);
      }
  }

now theres my main method pretty much:

     public void init(String carNumber, String queryDate, DoSheiltaResponse resp)
        {
 pdfUtil.OnNewPageAdded += (sender) => PdfUtil_OnNewPageAdded(sender);
            pdfUtil.OnNewPageEnded += (sender, pageNumber) => PdfUtil_OnNewPageEnded(sender, pageNumber, carNumber, queryDate);
   ///FIRST PAGE! - for first page no need to manually add 
            GenerateHeader(pdfUtil);
            BuildTitle(pdfUtil, fontUnderLine);
            BuildPreCarElements(pdfUtil, carNumber, queryDate);
            AddFooterFirstPage(pdfUtil, carNumber, queryDate);
  pdfUtil.AddNewPageToPDF();
  pdfUtil.TriggerOnPageEnded();

            pdfUtil.SavePdfFile(localDirectory, fileName);

}

Result: First page with footer - and logo - great. Second page, the logo and the footer are created, obviously the footer just below the logo because I havent mentioned any margin and so on. But, I want it to be fixed to the bottom, ( I dont know how long will my pdf page be, its dynamic ) tried doing position fixed, but then each footer will override the other, so Ill have a footer that has 3 lines with text '....page no.1/2/3' on top of each other Also, tried doing position: absolute but that one somewhy moved half of my logo from second page, to first page, and the footer changed from right below logo's on second page, to right below footer on first page.

Im kind of lost, any help would be appreciated!!

0

There are 0 best solutions below