diff options
| -rw-r--r-- | def.go | 2 | ||||
| -rw-r--r-- | fpdf.go | 47 | ||||
| -rw-r--r-- | fpdf_test.go | 10 | 
3 files changed, 30 insertions, 29 deletions
| @@ -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 @@ -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)  	}  } | 
