2

I'm using the go https://github.com/jung-kurt/gofpdf library to generate a pdf with a table which contains large number of rows . But when it exceeds one page,the page header will not be added to the remaining pages. Is there anyway where I can add the table header in the each page.(Not using page header option) . Here I have added a sample code I used

   package main
   
   import (
       "github.com/jung-kurt/gofpdf"
       "log"
   )
   
   func main() {
       generatePDF()
   }
   
   func generatePDF() error {
       //creating new report PDF
       pdf := newReport()
   
       //pdf table header
       pdf = header(pdf, []string{"col1", "col2", "col3", "col4", "col5"})
   
       //pdf table content
       data := [][]string{
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "d1", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "d1", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "d1", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "d1", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "d1", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "d1", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "d1", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "d1", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "d1", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "d1", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "d1", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "d1", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "d1", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "", "2 "},
           {"test", "1 2", "d1", "1 4", "15"},
           {"2 1", "2 2", "2 3", "d1", "2 "},
       }
   
       //b := [][]string{}
   
       pdf = table(pdf, data)
   
       if pdf.Err() {
           log.Fatalf("failed ! %s", pdf.Error())
       }
   
       err := pdf.OutputFileAndClose("table.pdf")
       if err != nil {
           return err
       }
       return nil
   }
   
   func newReport() *gofpdf.Fpdf {
       pdf := gofpdf.New("P", "mm", "A4", "")
       pdf.AddPage()
       pdf.Ln(20)
       pdf.SetFont("Times", "B", 14)
       pdf.Cell(20, 10, "tables")
       pdf.Ln(20)
       return pdf
   }
   
   func header(pdf *gofpdf.Fpdf, headerText []string) *gofpdf.Fpdf {
       pdf.SetFont("Times", "B", 16)
       pdf.SetFillColor(240, 240, 240)
   
       for _, str := range headerText {
           pdf.CellFormat(35, 10, str, "1", 0, "C", true, 0, "")
       }
   
       pdf.Ln(-1) //newline height equals the last line height
   
       return pdf
   }
   
   func table(pdf *gofpdf.Fpdf, tbl [][]string) *gofpdf.Fpdf {
       pdf.SetFont("Times", "", 16)
       pdf.SetFillColor(255, 255, 255) //white color
   
       align := []string{"C", "C", "C", "C", "C"}
   
       for _, line := range tbl {
           for i, str := range line {
               pdf.CellFormat(35, 10, str, "1", 0, align[i], false, 0, "")
           }
           pdf.Ln(-1)
       }
       pdf.Ln(-1)
       return pdf
   }

Hash934
  • 87
  • 1
  • 11

0 Answers0