用纯 Go 生成 PDF,
无需坐标。
gpdf 是一个 MIT 协议、纯 Go 编写的 PDF 生成库。0 个外部依赖,仅使用 Go 标准库。用 12 栏网格声明布局,通过 TrueType 嵌入原生渲染中、日、韩文。单页文档约 13 微秒渲染完成——比 gofpdf、gopdf、Maroto v2 快 10–30 倍。
package main import ( "os" "github.com/gpdf-dev/gpdf/document" "github.com/gpdf-dev/gpdf/template" ) func main() { doc := template.New( template.WithPageSize(document.A4), template.WithMargins(document.UniformEdges(document.Mm(20))), ) page := doc.AddPage() page.AutoRow(func(r *template.RowBuilder) { r.Col(12, func(c *template.ColBuilder) { c.Text("Hello, World!", template.FontSize(24), template.Bold()) }) }) data, _ := doc.Generate() os.WriteFile("hello.pdf", data, 0644) }
纯 Go,0 依赖
仅使用 Go 标准库——外部包为 0、无 CGO、无 C 工具链。go build 生成的单一二进制,在 Linux 容器、AWS Lambda、边缘节点都能以相同方式运行。
12 栏网格,不写坐标
Bootstrap 风格布局。r.Col(7) + r.Col(5) = 12。布局决定写在代码里,而不是像素标尺上。行与列可以任意嵌套。
中日韩一等公民
内置 TrueType 字体嵌入。中文、日文、韩文 3 种 CJK 书写系统原样渲染。没有豆腐块(□),没有乱码,也无需第三方补丁。
用数字看速度
在 cjk 发票上计测
基准测试:发票生成 — 中文/日文/韩文文本、3 个 TrueType 字体子集嵌入、1 个 logo、1 个二维码。在 Go 1.25 / Apple M2 上按单份文档测量。数字已取整,每次运行略有差异。
团队为何选择 gpdf
为真实生产 pdf 而设计
0 外部依赖
仅 Go 标准库。无 CGO、无 C 工具链、无原生模块。每次构建都可复现。
12 栏网格
行与列之和为 12。Bootstrap 风格,第一天就能上手。行列可任意嵌套。
3 种 CJK 书写系统
嵌入 TrueType 字体,无需外部工具即可渲染中文 (ZH)、日文 (JP)、韩文 (KR)。
快 10–30 倍
单页文档约 13 微秒。与 gofpdf、gopdf、Maroto v2 基准对比的结果。
链式 Builder API
PageBuilder → RowBuilder → ColBuilder。所有配置通过 Functional Options (WithXxx) 统一完成。
JSON Schema + Go Templates
用 JSON 声明 PDF 结构,用 text/template 驱动,从单一数据源批量生成数千份文档。
常见问题
开始前的关键答案
gpdf 是什么?
gpdf 是一个 MIT 协议、纯 Go 编写的 PDF 生成库。0 个外部依赖,仅使用 Go 标准库。采用 Bootstrap 风格的 12 栏网格声明布局,并通过 TrueType 字体嵌入原生支持中文、日文、韩文。
gpdf 与替代方案相比有多快?
gpdf 渲染一份单页 PDF 文档约需 13 微秒,与 gofpdf、gopdf、Maroto v2 的基准测试相比快 10–30 倍。
gpdf 支持中文、日文和韩文吗?
支持。gpdf 嵌入 TrueType 字体,原生渲染中文 (ZH)、日文 (JP)、韩文 (KR) — 3 种 CJK 书写系统全部支持。没有豆腐块(□),没有乱码。
gpdf 可以免费使用吗?
可以。gpdf 采用 MIT 协议,完全开源。个人、商业用途和再分发均可免费使用。
如何安装 gpdf?
运行 go get github.com/gpdf-dev/gpdf。需要 Go 1.22 及以上版本(已在 Go 1.26 上通过测试)。0 外部依赖,仅使用 Go 标准库。