johnfercher/maroto 不错的pdf golang pdf 生成工具包
johnfercher/maroto 借鉴了bootstrap 的网格模式,使用了gofpdf 生成pdf,是一个很不错的golang pdf 工具
有一个问题是不支持中文(因为配置写的的原因)看到网上有一个中国人fork添加了AddUTF8Font 支持,这样
中文就可以显示了,以下是一个参考的使用
参考特性
核心代码
package main
import (
"fmt"
"os"
"time"
"github.com/Vale-sail/maroto/pkg/consts"
"github.com/Vale-sail/maroto/pkg/pdf"
"github.com/Vale-sail/maroto/pkg/props"
)
func main() {
begin := time.Now()
m := pdf.NewMarotoCustomSize(consts.Landscape, "C6", "mm", 114.0, 162.0)
m.SetPageMargins(5, 5, 5)
m.AddUTF8Font("NotoSansSC", "", "./font/NotoSansSC-Regular.ttf")
m.AddUTF8Font("NotoSansSC", "I", "./font/NotoSansSC-Regular.ttf")
m.AddUTF8Font("NotoSansSC", "B", "./font/NotoSansSC-Regular.ttf")
m.AddUTF8Font("NotoSansSC", "BI", "./font/NotoSansSC-Regular.ttf")
// m.SetBorder(true)
m.Row(40, func() {
m.Col(4, func() {
_ = m.FileImage("biplane.jpg", props.Rect{
Center: true,
Percent: 50,
})
})
m.Col(4, func() {
m.Text("Gopher International Shipping, Inc.", props.Text{
Top: 12,
Size: 12,
Extrapolate: true,
})
})
m.ColSpace(4)
})
m.Line(10)
m.Row(30, func() {
m.Col(12, func() {
m.Text("João Sant'Ana 100 Main Street", props.Text{
Size: 10,
Align: consts.Right,
})
m.Text("荣锋亮 TN 39021", props.Text{
Size: 10,
Align: consts.Right,
Family: "NotoSansSC",
Top: 10,
})
m.Text("United States (USA)", props.Text{
Size: 10,
Align: consts.Right,
Top: 20,
})
})
})
m.Row(30, func() {
m.Col(12, func() {
m.QrCode("https://cnblogs.com/rongfengliang")
})
})
err := m.OutputFileAndClose("customsize.pdf")
if err != nil {
fmt.Println("Could not save PDF:", err)
os.Exit(1)
}
end := time.Now()
fmt.Println(end.Sub(begin))
}
说明
实际上同时也应该保留AddUTF8FontFromBytes,同时也应该添加中文编码的常量,可以方便软件的分发以及使用(后边fork修改一个版本)
参考资料
https://github.com/johnfercher/maroto
https://github.com/Vale-sail/maroto