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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2019-12-02 testcontainers 基本使用
2019-12-02 sqler 2.2 发布了,支持定时任务以及触发器
2018-12-02 PostgreSQL Q&A: Building an Enterprise-Grade PostgreSQL Setup Using Open Source Tools