summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--def.go2
-rw-r--r--fpdf.go47
-rw-r--r--fpdf_test.go10
3 files changed, 30 insertions, 29 deletions
diff --git a/def.go b/def.go
index ecc700b..552415f 100644
--- a/def.go
+++ b/def.go
@@ -221,7 +221,7 @@ type Fpdf struct {
headerFnc func() // function provided by app and called to write header
inFooter bool // flag set when processing footer
footerFnc func() // function provided by app and called to write footer
- footerFncLpi func(bool) // this same with footerFnc with additioanl info to indicates last page
+ footerFncLpi func(bool) // function provided by app and called to write footer with last page flag
zoomMode string // zoom display mode
layoutMode string // layout display mode
title string // title
diff --git a/fpdf.go b/fpdf.go
index 2c7e993..a8656dd 100644
--- a/fpdf.go
+++ b/fpdf.go
@@ -363,18 +363,27 @@ func (f *Fpdf) SetHeaderFunc(fnc func()) {
// Close() and should not be called directly by the application. The
// implementation in Fpdf is empty, so you have to provide an appropriate
// function if you want page footers. fnc will typically be a closure that has
-// access to the Fpdf instance and other document generation variables.
+// access to the Fpdf instance and other document generation variables. See
+// SetFooterFuncLpi for a similar function that passes a last page indicator.
//
// This method is demonstrated in the example for AddPage().
-// Deprecated: Use SetFooterFuncLpi instead.
func (f *Fpdf) SetFooterFunc(fnc func()) {
f.footerFnc = fnc
+ f.footerFncLpi = nil
}
-// SetFooterFuncLpi work like SetFooterFnc it's just add Last Page information,
-// true mean this is the last page.
-func (f *Fpdf) SetFooterFuncLpi(fnc func(bool)) {
+// SetFooterFuncLpi sets the function that lets the application render the page
+// footer. The specified function is automatically called by AddPage() and
+// Close() and should not be called directly by the application. It is passed a
+// boolean that is true if the last page of the document is being rendered. The
+// implementation in Fpdf is empty, so you have to provide an appropriate
+// function if you want page footers. fnc will typically be a closure that has
+// access to the Fpdf instance and other document generation variables.
+//
+// This method is demonstrated in the example for AddPage().
+func (f *Fpdf) SetFooterFuncLpi(fnc func(lastPage bool)) {
f.footerFncLpi = fnc
+ f.footerFnc = nil
}
// SetTopMargin defines the top margin. The method can be called before
@@ -545,18 +554,13 @@ func (f *Fpdf) Close() {
}
}
// Page footer
- if f.footerFnc != nil && f.footerFncLpi == nil {
- f.inFooter = true
+ f.inFooter = true
+ if f.footerFnc != nil {
f.footerFnc()
- f.inFooter = false
- }
-
- // Page footer
- if f.footerFncLpi != nil {
- f.inFooter = true
- f.footerFncLpi(true) // Last Page.
- f.inFooter = false
+ } else if f.footerFncLpi != nil {
+ f.footerFncLpi(true)
}
+ f.inFooter = false
// Close page
f.endpage()
@@ -607,18 +611,15 @@ func (f *Fpdf) AddPageFormat(orientationStr string, size SizeType) {
tc := f.color.text
cf := f.colorFlag
if f.page > 0 {
+ f.inFooter = true
// Page footer avoid double call on footer.
- if f.footerFnc != nil && f.footerFncLpi == nil {
- f.inFooter = true
+ if f.footerFnc != nil {
f.footerFnc()
- f.inFooter = false
+ } else if f.footerFncLpi != nil {
+ f.footerFncLpi(false) // not last page.
}
- if f.footerFncLpi != nil {
- f.inFooter = true
- f.footerFncLpi(false) //not last page.
- f.inFooter = false
- }
+ f.inFooter = false
// Close page
f.endpage()
}
diff --git a/fpdf_test.go b/fpdf_test.go
index f25866e..9b45486 100644
--- a/fpdf_test.go
+++ b/fpdf_test.go
@@ -116,11 +116,11 @@ func TestFooterFuncLpi(t *testing.T) {
}
w := &bytes.Buffer{}
if err := pdf.Output(w); err != nil {
- t.Errorf("got err:%v want nil")
+ t.Errorf("unexpected err: %s", err)
}
b := w.Bytes()
if bytes.Contains(b, []byte(oldFooterFnc)) {
- t.Errorf("Not expecting %s render on pdf when FooterFncLpi is set", oldFooterFnc)
+ t.Errorf("not expecting %s render on pdf when FooterFncLpi is set", oldFooterFnc)
}
got := bytes.Count(b, []byte("bothPages"))
if got != 2 {
@@ -128,16 +128,16 @@ func TestFooterFuncLpi(t *testing.T) {
}
got = bytes.Count(b, []byte(firstPageOnly))
if got != 1 {
- t.Errorf("footer %s should render only on first page got:%d", firstPageOnly, got)
+ t.Errorf("footer %s should render only on first page got: %d", firstPageOnly, got)
}
got = bytes.Count(b, []byte(lastPageOnly))
if got != 1 {
- t.Errorf("footer %s should render only on first page got:%d", lastPageOnly, got)
+ t.Errorf("footer %s should render only on first page got: %d", lastPageOnly, got)
}
f := bytes.Index(b, []byte(firstPageOnly))
l := bytes.Index(b, []byte(lastPageOnly))
if f > l {
- t.Errorf("index %s : %d should less than indec of %s : %d", f, l)
+ t.Errorf("index %d (%s) should less than index %d (%s)", f, firstPageOnly, l, lastPageOnly)
}
}