diff options
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | def.go | 1 | ||||
| -rw-r--r-- | fpdf.go | 10 | ||||
| -rw-r--r-- | fpdf_test.go | 54 | 
4 files changed, 66 insertions, 0 deletions
@@ -14,3 +14,4 @@ private  *.sublime*  *.swp  **/*.test +.idea/ @@ -442,6 +442,7 @@ type Pdf interface {  	SetMargins(left, top, right float64)  	SetPageBoxRec(t string, pb PageBox)  	SetPageBox(t string, x, y, wd, ht float64) +	SetPage(pageNum int)  	SetProtection(actionFlag byte, userPassStr, ownerPassStr string)  	SetRightMargin(margin float64)  	SetSubject(subjectStr string, isUTF8 bool) @@ -383,6 +383,12 @@ func (f *Fpdf) SetPageBoxRec(t string, pb PageBox) {  func (f *Fpdf) SetPageBox(t string, x, y, wd, ht float64) {  	f.SetPageBoxRec(t, PageBox{SizeType{Wd: wd, Ht: ht}, PointType{X: x, Y: y}})  } +// SetPage sets the current page to that of a valid page in the PDF document. +func (f *Fpdf) SetPage(pageNum int) { +	if (pageNum > 0) && (pageNum < len(f.pages)) { +		f.page = pageNum +	} +}  // SetFontLocation sets the location in the file system of the font and font  // definition files. @@ -670,6 +676,9 @@ func (f *Fpdf) AddPageFormat(orientationStr string, size SizeType) {  	if f.err != nil {  		return  	} +	if f.page != len(f.pages)-1 { +		f.page = len(f.pages)-1 +	}  	if f.state == 0 {  		f.open()  	} @@ -684,6 +693,7 @@ func (f *Fpdf) AddPageFormat(orientationStr string, size SizeType) {  	fc := f.color.fill  	tc := f.color.text  	cf := f.colorFlag +	  	if f.page > 0 {  		f.inFooter = true  		// Page footer avoid double call on footer. diff --git a/fpdf_test.go b/fpdf_test.go index d84de54..7969f94 100644 --- a/fpdf_test.go +++ b/fpdf_test.go @@ -23,6 +23,7 @@ import (  	"io"  	"io/ioutil"  	"math" +	"math/rand"  	"net/http"  	"os"  	"path/filepath" @@ -2382,3 +2383,56 @@ func ExampleFpdf_SubWrite() {  	// Output:  	// Successfully generated pdf/Fpdf_SubWrite.pdf  } + +func ExampleChangePage() { +	pdf := gofpdf.New("P", "cm", "A4", "") +	pdf.SetFont("Times", "", 12) + +	var time []float64 +	temperaturesFromSensors := make([][]float64, 5) +	maxs := []float64{25, 41, 89, 62, 11} +	for i := range temperaturesFromSensors { +		temperaturesFromSensors[i] = make([]float64, 0) +	} + +	for i := 0.0; i < 100; i += 0.5 { +		time = append(time, i) +		for j, sensor := range temperaturesFromSensors { +			dataValue := rand.Float64() * maxs[j] +			sensor = append(sensor, dataValue) +			temperaturesFromSensors[j] = sensor +		} +	} +	var graphs []gofpdf.GridType +	var pageNums []int +	xMax := time[len(time)-1] +	for i := range temperaturesFromSensors { +		//Create a new page and graph for each sensor we want to graph. +		pdf.AddPage() +		pdf.Ln(1) +		//Custom label per sensor +		pdf.WriteAligned(0, 0, "Temperature Sensor "+strconv.Itoa(i+1)+" (C) vs Time (min)", "C") +		pdf.Ln(0.5) +		graph := gofpdf.NewGrid(pdf.GetX(), pdf.GetY(), 20, 10) +		graph.TickmarksContainX(0, xMax) +		//Custom Y axis +		graph.TickmarksContainY(0, maxs[i]) +		graph.Grid(pdf) +		//Save references and locations. +		graphs = append(graphs, graph) +		pageNums = append(pageNums, pdf.PageNo()) +	} +	// For each X, graph the Y in each sensor. +	for i, currTime := range time { +		for j, sensor := range temperaturesFromSensors { +			pdf.SetPage(pageNums[j]) +			graph := graphs[j] +			temperature := sensor[i] +			pdf.Circle(graph.X(currTime), graph.Y(temperature), 0.04, "D") +		} +	} + +	fileStr := example.Filename("Fpdf_SetPage") +	err := pdf.OutputFileAndClose(fileStr) +	example.Summary(err, fileStr) +}  | 
