pdf

package
v0.15.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 24, 2019 License: MIT Imports: 5 Imported by: 0

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Maroto

type Maroto interface {
	// Grid System
	Row(height float64, closure func())
	Col(closure func())
	ColSpace()
	ColSpaces(qtd int)

	// Registers
	RegisterHeader(closure func())
	RegisterFooter(closure func())

	// Helpers
	SetBorder(on bool)
	GetBorder() bool
	GetPageSize() (float64, float64)
	GetCurrentPage() int

	// Outside Col/Row Components
	TableList(header []string, contents [][]string, prop ...props.TableList)
	Line(spaceHeight float64)

	// Inside Col/Row Components
	Text(text string, prop ...props.Text)
	FileImage(filePathName string, prop ...props.Rect) (err error)
	Base64Image(base64 string, extension consts.Extension, prop ...props.Rect) (err error)
	Barcode(code string, prop ...props.Barcode) error
	QrCode(code string, prop ...props.Rect)
	Signature(label string, prop ...props.Font)

	// File System
	OutputFileAndClose(filePathName string) error
	Output() (bytes.Buffer, error)
}

Maroto is the principal abstraction to create a PDF document.

func NewMaroto

func NewMaroto(orientation consts.Orientation, pageSize consts.PageSize) Maroto

NewMaroto create a Maroto instance returning a pointer to PdfMaroto Receive an Orientation and a PageSize.

type PdfMaroto

type PdfMaroto struct {
	Pdf        gofpdf.Pdf
	Math       internal.Math
	Font       internal.Font
	TextHelper internal.Text
	SignHelper internal.Signature
	Image      internal.Image
	Code       internal.Code

	DebugMode bool
	// contains filtered or unexported fields
}

PdfMaroto is the principal structure which implements Maroto abstraction

func (*PdfMaroto) Barcode

func (s *PdfMaroto) Barcode(code string, prop ...props.Barcode) (err error)

Barcode create an barcode inside a cell.

Example

ExamplePdfMaroto_Barcode demonstrates how to place a barcode inside a Col. Passing nil on barcode props parameter implies the Barcode fills it's context cell depending on it's size. It's possible to define the barcode positioning through the top and left parameters unless center parameter is true. In brief, when center parameter equals true, left and top parameters has no effect. Percent parameter represents the Barcode's width/height inside the cell. i.e. Percent: 75 means that the Barcode will take up 75% of Col's width There is a constraint in the proportion defined, height cannot be greater than 20% of the width, and height cannot be smaller than 10% of the width.

package main

import (
	"github.com/johnfercher/maroto/pkg/consts"
	"github.com/johnfercher/maroto/pkg/pdf"
	"github.com/johnfercher/maroto/pkg/props"
)

func main() {
	m := pdf.NewMaroto(consts.Portrait, consts.A4)

	// Do a lot of things on rows and columns...

	m.Col(func() {
		_ = m.Barcode("https://github.com/johnfercher/maroto", props.Barcode{
			Percent:    75,
			Proportion: props.Proportion{Width: 50, Height: 10},
			Center:     true,
		})
	})

	// do more things...
}
Output:

func (*PdfMaroto) Base64Image

func (s *PdfMaroto) Base64Image(base64 string, extension consts.Extension, prop ...props.Rect) error

Base64Image add an Image reading byte slices inside a cell. Defining Image properties.

Example

ExamplePdfMaroto_Base64Image demonstrates how to add an Image from a base64 string. When rect properties is nil, the method makes the Image fulfill the context cell, based on width and height from Image and cell. When center is true, left and top has no effect. Percent represents the width/height of the Image inside the cell: Ex: 85, means that Image will have width of 85% of column width. When center is false, is possible to manually positioning the Image with left and top.

package main

import (
	"github.com/johnfercher/maroto/pkg/consts"
	"github.com/johnfercher/maroto/pkg/pdf"
	"github.com/johnfercher/maroto/pkg/props"
)

func main() {
	m := pdf.NewMaroto(consts.Portrait, consts.A4)
	rowHeight := 5.0
	base64String := "y7seWGHE923Sdgs..."

	m.Row(rowHeight, func() {
		m.Col(func() {
			_ = m.Base64Image(base64String, consts.Png, props.Rect{
				Left:    5,
				Top:     5,
				Center:  true,
				Percent: 85,
			})
		})
	})

	// Do more things and save...
}
Output:

func (*PdfMaroto) Col

func (s *PdfMaroto) Col(closure func())

Col create a column inside a row and enable to add components inside.

Example

ExamplePdfMaroto_Col demonstrates how to add an useful column

package main

import (
	"github.com/johnfercher/maroto/pkg/consts"
	"github.com/johnfercher/maroto/pkg/pdf"
)

func main() {
	m := pdf.NewMaroto(consts.Portrait, consts.A4)
	rowHeight := 5.0

	m.Row(rowHeight, func() {
		m.Col(func() {
			// Add Image, Text, Signature, QrCode or Barcode...
		})
	})

	// Do more things and save...
}
Output:

func (*PdfMaroto) ColSpace

func (s *PdfMaroto) ColSpace()

ColSpace create an empty column inside a row.

Example

ExamplePdfMaroto_ColSpace demonstrates how to add an empty column inside a row.

package main

import (
	"github.com/johnfercher/maroto/pkg/consts"
	"github.com/johnfercher/maroto/pkg/pdf"
)

func main() {
	m := pdf.NewMaroto(consts.Portrait, consts.A4)
	rowHeight := 5.0

	m.Row(rowHeight, func() {
		m.ColSpace()
	})

	// Do more things and save...
}
Output:

func (*PdfMaroto) ColSpaces

func (s *PdfMaroto) ColSpaces(qtd int)

ColSpaces create some empty columns inside a row.

Example

ExamplePdfMaroto_ColSpaces demonstrates how to add some empty columns inside a row.

package main

import (
	"github.com/johnfercher/maroto/pkg/consts"
	"github.com/johnfercher/maroto/pkg/pdf"
)

func main() {
	m := pdf.NewMaroto(consts.Portrait, consts.A4)
	rowHeight := 5.0

	m.Row(rowHeight, func() {
		m.ColSpaces(2)
	})

	// Do more things and save...
}
Output:

func (*PdfMaroto) FileImage

func (s *PdfMaroto) FileImage(filePathName string, prop ...props.Rect) error

FileImage add an Image reading from disk inside a cell. Defining Image properties.

Example

ExamplePdfMaroto_FileImage demonstrates how add an Image reading from disk. When props.Rect is nil, method make Image fulfill the context cell, based on width and cell from Image and cell. When center is true, left and top has no effect. Percent represents the width/height of the Image inside the cell: Ex: 85, means that Image will have width of 85% of column width. When center is false, is possible to manually positioning the Image with left and top.AddFromBase64(string, float64, float64, float64, float64, float64, consts.Extension)

package main

import (
	"github.com/johnfercher/maroto/pkg/consts"
	"github.com/johnfercher/maroto/pkg/pdf"
	"github.com/johnfercher/maroto/pkg/props"
)

func main() {
	m := pdf.NewMaroto(consts.Portrait, consts.A4)
	rowHeight := 5.0

	m.Row(rowHeight, func() {
		m.Col(func() {
			_ = m.FileImage("path/Image.jpg", props.Rect{
				Left:    5,
				Top:     5,
				Center:  true,
				Percent: 85,
			})
		})
	})

	// Do more things and save...
}
Output:

func (*PdfMaroto) GetBorder

func (s *PdfMaroto) GetBorder() bool

GetBorder return the actual border value.

Example

ExamplePdfMaroto_GetBorder demonstrates how to obtain the actual borders status

package main

import (
	"github.com/johnfercher/maroto/pkg/consts"
	"github.com/johnfercher/maroto/pkg/pdf"
)

func main() {
	m := pdf.NewMaroto(consts.Portrait, consts.A4)

	// false
	m.GetBorder()

	m.SetBorder(true)

	// true
	m.GetBorder()

	// Do more things and save...
}
Output:

func (*PdfMaroto) GetCurrentPage

func (s *PdfMaroto) GetCurrentPage() int

GetCurrentPage obtain the current page index this can be used inside a RegisterFooter/RegisterHeader to draw the current page, or to another purposes

func (*PdfMaroto) GetPageSize

func (s *PdfMaroto) GetPageSize() (float64, float64)

GetPageSize return the actual page size

func (*PdfMaroto) Line

func (s *PdfMaroto) Line(spaceHeight float64)

Line draw a line from margin left to margin right in the currently row.

Example

ExamplePdfMaroto_Line demonstrates how to draw a line separator.

package main

import (
	"github.com/johnfercher/maroto/pkg/consts"
	"github.com/johnfercher/maroto/pkg/pdf"
)

func main() {
	m := pdf.NewMaroto(consts.Portrait, consts.A4)

	m.Line(1.0)

	// Do more things and save...
}
Output:

func (*PdfMaroto) Output

func (s *PdfMaroto) Output() (bytes.Buffer, error)

Output extract PDF in byte slices

Example

ExamplePdfMaroto_Output demonstrates how to get a base64 string from PDF

package main

import (
	"github.com/johnfercher/maroto/pkg/consts"
	"github.com/johnfercher/maroto/pkg/pdf"
)

func main() {
	m := pdf.NewMaroto(consts.Portrait, consts.A4)

	// Do a lot of things on rows and columns...

	_, err := m.Output()
	if err != nil {
		return
	}
}
Output:

func (*PdfMaroto) OutputFileAndClose

func (s *PdfMaroto) OutputFileAndClose(filePathName string) (err error)

OutputFileAndClose save pdf in disk.

Example

ExamplePdfMaroto_OutputFileAndClose demonstrates how to save a PDF object into disk.

package main

import (
	"github.com/johnfercher/maroto/pkg/consts"
	"github.com/johnfercher/maroto/pkg/pdf"
)

func main() {
	m := pdf.NewMaroto(consts.Portrait, consts.A4)

	// Do a lot of things on rows and columns...

	err := m.OutputFileAndClose("path/file.pdf")
	if err != nil {
		return
	}
}
Output:

func (*PdfMaroto) QrCode

func (s *PdfMaroto) QrCode(code string, prop ...props.Rect)

QrCode create a qrcode inside a cell.

Example

ExamplePdfMaroto_QrCode demonstrates how to add a QR Code inside a Col. Passing nil on rectProps makes the QR Code fills the context cell depending on width and height of the QR Code and the cell. When center is true, left and top has no effect. Percent represents the width/height of the QR Code inside the cell. i.e. 80 means that the QR Code will take up 80% of Col's width When center is false, positioning of the QR Code can be done through left and top.

package main

import (
	"github.com/johnfercher/maroto/pkg/consts"
	"github.com/johnfercher/maroto/pkg/pdf"
	"github.com/johnfercher/maroto/pkg/props"
)

func main() {
	m := pdf.NewMaroto(consts.Portrait, consts.A4)
	rowHeight := 5.0

	m.Row(rowHeight, func() {
		m.Col(func() {
			m.QrCode("https://godoc.org/github.com/johnfercher/maroto", props.Rect{
				Left:    5,
				Top:     5,
				Center:  false,
				Percent: 80,
			})
		})
	})
}
Output:

func (*PdfMaroto) RegisterFooter

func (s *PdfMaroto) RegisterFooter(closure func())

RegisterFooter define a sequence of Rows, Lines ou TableLists which will be added in every new page

Example

ExamplePdfMaroto_RegisterFooter demonstrates how to register footer. For register footer in Maroto you need to call method RegisterFooter that receives a closure. In this closure you are free to set any components you want to compose your footer. In this example there is a signature and a text with right align. It is important to remember that it is recommended to create Row's and Col's if necessary.

package main

import (
	"github.com/johnfercher/maroto/pkg/consts"
	"github.com/johnfercher/maroto/pkg/pdf"
	"github.com/johnfercher/maroto/pkg/props"
	"time"
)

func main() {
	m := pdf.NewMaroto(consts.Portrait, consts.A4)

	m.RegisterFooter(func() {
		m.Row(10, func() {
			m.Col(func() {
				m.Signature("lorem ipsum dolor")
			})
			m.Col(func() {
				m.Text(time.Now().Format("02-January-2006"), props.Text{Align: consts.Right})
			})
		})
	})

	// Do more things or not and save...
}
Output:

func (*PdfMaroto) RegisterHeader

func (s *PdfMaroto) RegisterHeader(closure func())

RegisterHeader define a sequence of Rows, Lines ou TableLists which will be added in every new page

Example

ExamplePdfMaroto_RegisterHeader demonstrates how to register header. For register header in Maroto you need to call method RegisterHeader that receives a closure. In this closure you are free to set any components you want to compose your header. In this example there is a two texts with different props and one image. It is important to remember that it is recommended to create Row's and Col's if necessary. A tip is to register the header immediately after the Maroto instantiation to make the code easier to read.

package main

import (
	"github.com/johnfercher/maroto/pkg/consts"
	"github.com/johnfercher/maroto/pkg/pdf"
	"github.com/johnfercher/maroto/pkg/props"
	"time"
)

func main() {
	m := pdf.NewMaroto(consts.Portrait, consts.A4)

	m.RegisterHeader(func() {
		m.Row(10, func() {
			m.Col(func() {
				m.Text("lorem ipsum dolor", props.Text{Align: consts.Left})
			})
			m.Col(func() {
				_ = m.FileImage("internal/assets/images/frontpage.png")
			})
			m.Col(func() {
				m.Text(time.Now().Format("02-January-2006"),
					props.Text{Align: consts.Right})
			})
		})
	})

	// Do more things or not and save...
}
Output:

func (*PdfMaroto) Row

func (s *PdfMaroto) Row(height float64, closure func())

Row define a row and enable add columns inside the row.

Example

ExamplePdfMaroto_Row demonstrates how to define a row.

package main

import (
	"github.com/johnfercher/maroto/pkg/consts"
	"github.com/johnfercher/maroto/pkg/pdf"
)

func main() {
	m := pdf.NewMaroto(consts.Portrait, consts.A4)
	rowHeight := 5.0

	m.Row(rowHeight, func() {
		// ... Add some columns
	})

	// Do more things and save...
}
Output:

func (*PdfMaroto) SetBorder

func (s *PdfMaroto) SetBorder(on bool)

SetBorder enable the draw of lines in every cell. Draw borders in all columns created.

Example

ExamplePdfMaroto_SetBorder demonstrates how to enable the line drawing in every cell

package main

import (
	"github.com/johnfercher/maroto/pkg/consts"
	"github.com/johnfercher/maroto/pkg/pdf"
)

func main() {
	m := pdf.NewMaroto(consts.Portrait, consts.A4)
	m.SetBorder(true)

	// Add some Rows, Cols, Lines and etc...
	// Here will be drawn borders in every cell

	m.SetBorder(false)

	// Add some Rows, Cols, Lines and etc...
	// Here will not be drawn borders

	// Do more things and save...
}
Output:

func (*PdfMaroto) Signature

func (s *PdfMaroto) Signature(label string, prop ...props.Font)

Signature add a space for a signature inside a cell, the space will have a line and a text below

Example

ExamplePdfMaroto_Signature demonstrates how to add a Signature space inside a col. Passing nil on signatureProp make the method use: arial Font, normal style and size 10.0. Not passing family, make method use arial. Not passing style, make method use normal. Not passing size, make method use 10.0.

package main

import (
	"github.com/johnfercher/maroto/pkg/consts"
	"github.com/johnfercher/maroto/pkg/pdf"
	"github.com/johnfercher/maroto/pkg/props"
)

func main() {
	m := pdf.NewMaroto(consts.Portrait, consts.A4)
	rowHeight := 5.0

	m.Row(rowHeight, func() {
		m.Col(func() {
			m.Signature("LabelForSignature", props.Font{
				Size:   12.0,
				Style:  consts.BoldItalic,
				Family: consts.Courier,
			})
		})
	})

	// Do more things and save...
}
Output:

func (*PdfMaroto) TableList

func (s *PdfMaroto) TableList(header []string, contents [][]string, prop ...props.TableList)

TableList create a table with multiple rows and columns. Headers define the amount of columns from each row. Headers have bold style, and localized at the top of table. Contents are array of arrays. Each array is one line.

Example

ExamplePdfMaroto_TableList demonstrates how to add a table with multiple rows and columns

package main

import (
	"github.com/johnfercher/maroto/pkg/consts"
	"github.com/johnfercher/maroto/pkg/pdf"
)

func main() {
	m := pdf.NewMaroto(consts.Portrait, consts.A4)

	headers := []string{"Header1", "Header2"}
	contents := [][]string{
		{"Content1", "Content2"},
		{"Content3", "Content3"},
	}

	// 1 Row of header
	// 2 Rows of contents
	// Each row have 2 columns
	m.TableList(headers, contents)

	// Do more things and save...
}
Output:

func (*PdfMaroto) Text

func (s *PdfMaroto) Text(text string, prop ...props.Text)

Text create a text inside a cell.

Example

ExamplePdfMaroto_Text demonstrates how to add a Text inside a col. Passing nil on fontProp makes the method use: arial Font, normal style, size 10.0 and align left. Not passing family, makes the method use arial. Not passing style, makes the method use normal. Not passing size, makes the method use 10.0. Not passing align, makes the method use left.

package main

import (
	"github.com/johnfercher/maroto/pkg/consts"
	"github.com/johnfercher/maroto/pkg/pdf"
	"github.com/johnfercher/maroto/pkg/props"
)

func main() {
	m := pdf.NewMaroto(consts.Portrait, consts.A4)
	rowHeight := 5.0

	m.Row(rowHeight, func() {
		m.Col(func() {
			m.Text("TextContent", props.Text{
				Size:   12.0,
				Style:  consts.BoldItalic,
				Family: consts.Courier,
				Align:  consts.Center,
				Top:    1.0,
			})
		})
	})

	// Do more things and save...
}
Output:

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL