Documentation ¶
Overview ¶
Package Maroto provide a simple way to generate PDF documents. Maroto is inspired in Bootstrap and uses gofpdf. Simple and Fast
Features and Components ¶
- Grid system with rows and columns
- Automatic page breaks
- Inclusion of JPEG, PNG, GIF, TIFF and basic path-only SVG images
- Lines
- Barcodes
- Qrcodes
- Signatures
Maroto has only gofpdf dependency. All tests pass on Linux and Mac.
Installation ¶
To install the package on your system, run
go get github.com/johnfercher/maroto
Later, to receive updates, run
go get -u -v github.com/johnfercher/maroto/...
Quick Start ¶
The following Go Code generates a simple PDF file.
m := maroto.NewMaroto(maroto.Portrait, maroto.A4) m.Row("MyRow", 10, func() { m.Col("MyCol", func() { m.Text("MyText", &maroto.TextProp{ Size: 18, Style: maroto.Bold, Align: maroto.Center, Top: 9, }) }) }) m.OutputFileAndClose("maroto.pdf")
See the functions in the maroto_test.go file (shown as examples in this documentation) for more advanced PDF examples.
Conversion Notes ¶
This package is an high level API from gofpdf. The original API names have been slightly adapted. And the package search to be simpler to use.
The main contribution upside gofpdf is the grid system with high level components.
License ¶
Maroto is released under the GPL3 License.
Acknowledgments ¶
This package’s Code and documentation are based on gofpdf.
Roadmap ¶
- Improve test coverage as reported by the coverage tool.
Index ¶
- type Align
- type Code
- type Extension
- type Family
- type Font
- type Image
- type Maroto
- type Math
- type Orientation
- type PageSize
- type PdfMaroto
- func (m *PdfMaroto) Barcode(code string, rectProp *RectProp) (err error)
- func (m *PdfMaroto) Base64Image(base64 string, extension Extension, rectProp *RectProp)
- func (m *PdfMaroto) Col(label string, closure func())
- func (m *PdfMaroto) ColSpace()
- func (m *PdfMaroto) ColSpaces(qtd int)
- func (m *PdfMaroto) FileImage(filePathName string, rectProp *RectProp)
- func (m *PdfMaroto) GetDebugMode() bool
- func (m *PdfMaroto) GetPageSize() (float64, float64)
- func (m *PdfMaroto) Line()
- func (m *PdfMaroto) Output() (bytes.Buffer, error)
- func (m *PdfMaroto) OutputFileAndClose(filePathName string) (err error)
- func (m *PdfMaroto) QrCode(code string, rectProp *RectProp)
- func (m *PdfMaroto) Row(label string, height float64, closure func())
- func (m *PdfMaroto) RowTableList(label string, headers []string, contents [][]string, ...)
- func (m *PdfMaroto) SetDebugMode(on bool)
- func (m *PdfMaroto) Signature(label string, signatureProp *SignatureProp)
- func (m *PdfMaroto) Text(text string, fontProp *TextProp)
- type RectProp
- type Signature
- type SignatureProp
- type Style
- type TableListProp
- type Text
- type TextProp
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Code ¶
type Font ¶
type Font interface { SetFamily(family Family) SetStyle(style Style) SetSize(size float64) SetFont(family Family, style Style, size float64) GetFamily() Family GetStyle() Style GetSize() float64 GetFont() (Family, Style, float64) }
Abstraction of Font configuration used in Maroto
type Image ¶
type Image interface { AddFromFile(path string, marginTop float64, indexCol float64, qtdCols float64, colHeight float64, percent float64) AddFromBase64(b64 string, marginTop float64, indexCol float64, qtdCols float64, colHeight float64, percent float64, extension Extension) }
Abstraction of Image adding features used in Maroto
type Maroto ¶
type Maroto interface { // Grid System Row(label string, height float64, closure func()) Col(label string, closure func()) ColSpace() ColSpaces(qtd int) // Helpers SetDebugMode(on bool) GetDebugMode() bool GetPageSize() (float64, float64) // Components RowTableList(label string, headers []string, contents [][]string, tableListProp *TableListProp) Text(text string, fontProp *TextProp) FileImage(filePathName string, rectProp *RectProp) Base64Image(base64 string, extension Extension, rectProp *RectProp) Barcode(code string, rectProp *RectProp) error QrCode(code string, rectProp *RectProp) Signature(label string, signatureProp *SignatureProp) Line() // 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 Orientation, pageSize PageSize) Maroto
Create a Maroto instance returning a pointer to PdfMaroto Receive an Orientation and a PageSize.
type Math ¶
type Math interface { GetWidthPerCol(qtdCols float64) float64 GetRectCenterColProperties(imageWidth float64, imageHeight float64, qtdCols float64, colHeight float64, indexCol float64, percent float64) (x float64, y float64, w float64, h float64) GetCenterCorrection(outerSize, innerSize float64) float64 }
Abstraction of useful calcs used in Maroto
type Orientation ¶
type Orientation string
Representation of a page orientation
const ( // Represents the portrait orientation. Portrait Orientation = "P" // Represents the landscape orientation. Landscape Orientation = "L" )
type PdfMaroto ¶
type PdfMaroto struct { Pdf gofpdf.Pdf Math Math Font Font TextHelper Text SignHelper Signature Image Image Code Code DebugMode bool // contains filtered or unexported fields }
PdfMaroto is the principal structure which implements Maroto abstraction
func (*PdfMaroto) Base64Image ¶
Add an Image reading byte slices. Defining Image properties.
Example ¶
ExamplePdfMaroto_Base64Image demonstrates how add a Image reading a base64 string. When rectProp is nil, method make Image fullfill 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.
package main import ( "github.com/johnfercher/maroto" ) func main() { m := maroto.NewMaroto(maroto.Portrait, maroto.A4) rowHeight := 5.0 base64String := "y7seWGHE923Sdgs..." m.Row("MyRow", rowHeight, func() { m.Col("MyCol", func() { m.Base64Image(base64String, maroto.Png, &maroto.RectProp{ Left: 5, Top: 5, Center: true, Percent: 85, }) }) }) // Do more things and save... }
Output:
func (*PdfMaroto) Col ¶
Create a column inside a row and enable to add components inside.
Example ¶
ExamplePdfMaroto_Col demonstrates how to add a useful column
package main import ( "github.com/johnfercher/maroto" ) func main() { m := maroto.NewMaroto(maroto.Portrait, maroto.A4) rowHeight := 5.0 m.Row("MyRow", rowHeight, func() { m.Col("MyCol", func() { // Add Image, Text, Signature, QrCode or Barcode... }) }) // Do more things and save... }
Output:
func (*PdfMaroto) ColSpace ¶
func (m *PdfMaroto) ColSpace()
Create an empty column inside a row.
Example ¶
ExamplePdfMaroto_ColSpace demonstrates how to add a empty column inside a row.
package main import ( "github.com/johnfercher/maroto" ) func main() { m := maroto.NewMaroto(maroto.Portrait, maroto.A4) rowHeight := 5.0 m.Row("MyRow", rowHeight, func() { m.ColSpace() }) // Do more things and save... }
Output:
func (*PdfMaroto) ColSpaces ¶
Create some empty columns.
Example ¶
ExamplePdfMaroto_ColSpaces demonstrates how to add some empty columns inside a row.
package main import ( "github.com/johnfercher/maroto" ) func main() { m := maroto.NewMaroto(maroto.Portrait, maroto.A4) rowHeight := 5.0 m.Row("MyRow", rowHeight, func() { m.ColSpaces(2) }) // Do more things and save... }
Output:
func (*PdfMaroto) FileImage ¶
Add an Image reading from disk inside a column. Defining Image properties.
Example ¶
ExamplePdfMaroto_FileImage demonstrates how add a Image reading from disk. When rectProp is nil, method make Image fullfill 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.
package main import ( "github.com/johnfercher/maroto" ) func main() { m := maroto.NewMaroto(maroto.Portrait, maroto.A4) rowHeight := 5.0 m.Row("MyRow", rowHeight, func() { m.Col("MyCol", func() { m.FileImage("path/Image.jpg", &maroto.RectProp{ Left: 5, Top: 5, Center: true, Percent: 85, }) }) }) // Do more things and save... }
Output:
func (*PdfMaroto) GetDebugMode ¶
Get actual debug mode.
Example ¶
ExamplePdfMaroto_GetDebugMode demonstrates how to obtain the actual debug mode value
package main import ( "github.com/johnfercher/maroto" ) func main() { m := maroto.NewMaroto(maroto.Portrait, maroto.A4) // false m.GetDebugMode() m.SetDebugMode(true) // true m.GetDebugMode() // Do more things and save... }
Output:
func (*PdfMaroto) GetPageSize ¶
Get actual page size
func (*PdfMaroto) Line ¶
func (m *PdfMaroto) 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" ) func main() { m := maroto.NewMaroto(maroto.Portrait, maroto.A4) m.Line() // Do more things and save... }
Output:
func (*PdfMaroto) Output ¶
Get PDF in byte slices
Example ¶
ExamplePdfMaroto_Output demonstrates how to get a base64 string from PDF
package main import ( "github.com/johnfercher/maroto" ) func main() { m := maroto.NewMaroto(maroto.Portrait, maroto.A4) // Do a lot of things on rows and columns... _, err := m.Output() if err != nil { return } }
Output:
func (*PdfMaroto) OutputFileAndClose ¶
Save pdf in disk.
Example ¶
ExamplePdfMaroto_OutputFileAndClose demonstrates how to save a PDF in disk.
package main import ( "github.com/johnfercher/maroto" ) func main() { m := maroto.NewMaroto(maroto.Portrait, maroto.A4) // Do a lot of things on rows and columns... err := m.OutputFileAndClose("path/file.pdf") if err != nil { return } }
Output:
func (*PdfMaroto) Row ¶
Add 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" ) func main() { m := maroto.NewMaroto(maroto.Portrait, maroto.A4) rowHeight := 5.0 m.Row("MyRow", rowHeight, func() { // ... Add some columns }) // Do more things and save... }
Output:
func (*PdfMaroto) RowTableList ¶
func (m *PdfMaroto) RowTableList(label string, headers []string, contents [][]string, tableListProp *TableListProp)
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_RowTableList demonstrates how to add a table with multiple rows and columns
package main import ( "github.com/johnfercher/maroto" ) func main() { m := maroto.NewMaroto(maroto.Portrait, maroto.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.RowTableList("RowTableList1", headers, contents, nil) // Do more things and save... }
Output:
func (*PdfMaroto) SetDebugMode ¶
Enable debug mode. Draw borders in all columns created.
Example ¶
ExamplePdfMaroto_SetDebugMode demonstrates how to define debug mode
package main import ( "github.com/johnfercher/maroto" ) func main() { m := maroto.NewMaroto(maroto.Portrait, maroto.A4) m.SetDebugMode(true) // Add some Rows, Cols, Lines and etc... // Here will be drawn borders in every cell m.SetDebugMode(false) // Add some Rows, Cols, Lines and etc... // Here will not be drawn borders // Do more things and save... }
Output:
func (*PdfMaroto) Signature ¶
func (m *PdfMaroto) Signature(label string, signatureProp *SignatureProp)
Add a Signature space with a label TextHelper inside a column. Create a line with the width from a column and add a Text at the bottom of the line.
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" ) func main() { m := maroto.NewMaroto(maroto.Portrait, maroto.A4) rowHeight := 5.0 m.Row("MyRow", rowHeight, func() { m.Col("MyCol", func() { m.Signature("LabelForSignature", &maroto.SignatureProp{ Size: 12.0, Style: maroto.BoldItalic, Family: maroto.Courier, }) }) }) // Do more things and save... }
Output:
func (*PdfMaroto) Text ¶
Add a Text inside a column.
Example ¶
ExamplePdfMaroto_Text demonstrates how to add a Text inside a col. Passing nil on fontProp make the method use: arial Font, normal style, size 10.0 and align left. Not passing family, make method use arial. Not passing style, make method use normal. Not passing size, make method use 10.0. Not passing align, make method use left.
package main import ( "github.com/johnfercher/maroto" ) func main() { m := maroto.NewMaroto(maroto.Portrait, maroto.A4) rowHeight := 5.0 m.Row("MyRow", rowHeight, func() { m.Col("MyCol", func() { m.Text("TextContent", &maroto.TextProp{ Size: 12.0, Style: maroto.BoldItalic, Family: maroto.Courier, Align: maroto.Center, Top: 1.0, }) }) }) // Do more things and save... }
Output:
type Signature ¶
type SignatureProp ¶
Represents Signature properties
func (*SignatureProp) MakeValid ¶
func (f *SignatureProp) MakeValid()
Make Signature properties valid
type TableListProp ¶ added in v0.10.0
type TableListProp struct { HFontSize float64 HFontFamily Family HFontStyle Style Align Align HHeight float64 Space float64 CFontSize float64 CFontFamily Family CFontStyle Style CHeight float64 }
Represents TableList Properties
func (*TableListProp) MakeValid ¶ added in v0.10.0
func (t *TableListProp) MakeValid()