diff options
| -rw-r--r-- | fpdf.go | 14 | ||||
| -rw-r--r-- | fpdf_test.go | 77 | 
2 files changed, 62 insertions, 29 deletions
| @@ -330,6 +330,8 @@ func (f *Fpdf) SetFontLoader(loader FontLoader) {  // is empty, so you have to provide an appropriate function if you want page  // headers. 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) SetHeaderFunc(fnc func()) {  	f.headerFnc = fnc  } @@ -340,6 +342,8 @@ func (f *Fpdf) SetHeaderFunc(fnc func()) {  // 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) SetFooterFunc(fnc func()) {  	f.footerFnc = fnc  } @@ -469,6 +473,8 @@ func (f *Fpdf) SetCreator(creatorStr string, isUTF8 bool) {  // AliasNbPages defines an alias for the total number of pages. It will be  // substituted as the document is closed. An empty string is replaced with the  // string "{nb}". This method is demonstrated in tutorial 2. +// +// See the example for AddPage() for a demonstration of this method.  func (f *Fpdf) AliasNbPages(aliasStr string) {  	if aliasStr == "" {  		aliasStr = "{nb}" @@ -657,6 +663,8 @@ func (f *Fpdf) AddPage() {  }  // PageNo returns the current page number. +// +// See the example for AddPage() for a demonstration of this method.  func (f *Fpdf) PageNo() int {  	return f.page  } @@ -1640,8 +1648,8 @@ func (f *Fpdf) Text(x, y float64, txtStr string) {  // mode selected by SetAutoPageBreak. The function provided should not be  // called by the application.  // -// See tutorial 4 for an example of how this function can be used to manage -// multiple columns. +// See the example for SetLeftMargin() to see how this function can be used to +// manage multiple columns.  func (f *Fpdf) SetAcceptPageBreakFunc(fnc func() bool) {  	f.acceptPageBreak = fnc  } @@ -2115,6 +2123,8 @@ func (f *Fpdf) WriteLinkID(h float64, displayStr string, linkID int) {  // Ln performs a line break. The current abscissa goes back to the left margin  // and the ordinate increases by the amount passed in parameter. A negative  // value of h indicates the height of the last printed cell. +// +// This method is demonstrated in the example for MultiCell.  func (f *Fpdf) Ln(h float64) {  	f.x = f.lMargin  	if h < 0 { diff --git a/fpdf_test.go b/fpdf_test.go index 3872331..eaed7d8 100644 --- a/fpdf_test.go +++ b/fpdf_test.go @@ -34,10 +34,11 @@ import (  // Absolute path needed for gocov tool; relative OK for test  const ( -	cnGofpdfDir = "." -	cnFontDir   = cnGofpdfDir + "/font" -	cnImgDir    = cnGofpdfDir + "/image" -	cnTextDir   = cnGofpdfDir + "/text" +	cnGofpdfDir  = "." +	cnFontDir    = cnGofpdfDir + "/font" +	cnImgDir     = cnGofpdfDir + "/image" +	cnTextDir    = cnGofpdfDir + "/text" +	cnExampleDir = cnGofpdfDir + "/pdf"  )  type nullWriter struct { @@ -105,6 +106,10 @@ func textFile(fileStr string) string {  	return filepath.Join(cnTextDir, fileStr)  } +func exampleFile(fileStr string) string { +	return filepath.Join(cnExampleDir, fileStr) +} +  type fontResourceType struct {  } @@ -137,27 +142,37 @@ func lorem() string {  		"officia deserunt mollit anim id est laborum."  } -// Hello, world. Note that since only core fonts are used (in this case Arial, -// a synonym for Helvetica), an empty string can be specified for the font -// directory in the call to New(). -func ExampleFpdf_tutorial01() { +func exampleFilename(baseStr string) string { +	return filepath.Join(cnExampleDir, baseStr+".pdf") +} + +func summary(err error, fileStr string) { +	if err == nil { +		fmt.Printf("Successfully generated %s\n", fileStr) +	} else { +		fmt.Println(err) +	} +} + +// This example demonstrates the generation of a simple PDF document. Note that +// since only core fonts are used (in this case Arial, a synonym for +// Helvetica), an empty string can be specified for the font directory in the +// call to New(). Note also that the exampleFilename and summary functions are +// local to the test file and are not part of the gofpdf library. +func Example() {  	pdf := gofpdf.New("P", "mm", "A4", "")  	pdf.AddPage()  	pdf.SetFont("Arial", "B", 16)  	pdf.Cell(40, 10, "Hello World!") -	fileStr := filepath.Join(cnGofpdfDir, "pdf/tutorial01.pdf") +	fileStr := exampleFilename("basic")  	err := pdf.OutputFileAndClose(fileStr) -	if err == nil { -		fmt.Println("Successfully generated pdf/tutorial01.pdf") -	} else { -		fmt.Println(err) -	} +	summary(err, fileStr)  	// Output: -	// Successfully generated pdf/tutorial01.pdf +	// Successfully generated pdf/basic.pdf  } -// Header, footer and page-breaking -func ExampleFpdf_tutorial02() { +// This example demonsrates the generation of headers, footers and page breaks. +func ExampleFpdf_AddPage() {  	pdf := gofpdf.New("P", "mm", "A4", "")  	pdf.SetHeaderFunc(func() {  		pdf.Image(imageFile("logo.png"), 10, 6, 30, 0, false, "", 0, "") @@ -178,13 +193,16 @@ func ExampleFpdf_tutorial02() {  	for j := 1; j <= 40; j++ {  		pdf.CellFormat(0, 10, fmt.Sprintf("Printing line number %d", j), "", 1, "", false, 0, "")  	} -	pdf.OutputAndClose(docWriter(pdf, 2)) +	fileStr := exampleFilename("addpage") +	err := pdf.OutputFileAndClose(fileStr) +	summary(err, fileStr)  	// Output: -	// Successfully generated pdf/tutorial02.pdf +	// Successfully generated pdf/addpage.pdf  } -// Word-wrapping, line justification and page-breaking -func ExampleFpdf_tutorial03() { +// This example demonstrates word-wrapping, line justification and +// page-breaking. +func ExampleFpdf_MultiCell() {  	pdf := gofpdf.New("P", "mm", "A4", "")  	titleStr := "20000 Leagues Under the Seas"  	pdf.SetTitle(titleStr, false) @@ -249,13 +267,16 @@ func ExampleFpdf_tutorial03() {  	}  	printChapter(1, "A RUNAWAY REEF", textFile("20k_c1.txt"))  	printChapter(2, "THE PROS AND CONS", textFile("20k_c2.txt")) -	pdf.OutputAndClose(docWriter(pdf, 3)) +	fileStr := exampleFilename("multicell") +	err := pdf.OutputFileAndClose(fileStr) +	summary(err, fileStr)  	// Output: -	// Successfully generated pdf/tutorial03.pdf +	// Successfully generated pdf/multicell.pdf  } -// Multiple column layout -func ExampleFpdf_tutorial04() { +// This example demonstrates the generation of a PDF document that has multiple +// columns. This is accomplished with the SetLeftMargin() and Cell() methods. +func ExampleFpdf_SetLeftMargin() {  	var y0 float64  	var crrntCol int  	pdf := gofpdf.New("P", "mm", "A4", "") @@ -350,9 +371,11 @@ func ExampleFpdf_tutorial04() {  	})  	printChapter(1, "A RUNAWAY REEF", textFile("20k_c1.txt"))  	printChapter(2, "THE PROS AND CONS", textFile("20k_c2.txt")) -	pdf.OutputAndClose(docWriter(pdf, 4)) +	fileStr := exampleFilename("multicolumn") +	err := pdf.OutputFileAndClose(fileStr) +	summary(err, fileStr)  	// Output: -	// Successfully generated pdf/tutorial04.pdf +	// Successfully generated pdf/multicolumn.pdf  }  // Various table styles | 
