v1.0.13 · MIT · 纯 Go · 0 依赖

用纯 Go 生成 PDF,
无需坐标。

gpdf 是一个 MIT 协议、纯 Go 编写的 PDF 生成库。0 个外部依赖,仅使用 Go 标准库。用 12 栏网格声明布局,通过 TrueType 嵌入原生渲染中、日、韩文。单页文档约 13 微秒渲染完成——比 gofpdf、gopdf、Maroto v2 快 10–30 倍。

$go get github.com/gpdf-dev/gpdf
阅读快速入门
main.gogo run .
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)
}
一个完整的程序。运行它,即可得到 hello.pdf。
01

纯 Go,0 依赖

仅使用 Go 标准库——外部包为 0、无 CGO、无 C 工具链。go build 生成的单一二进制,在 Linux 容器、AWS Lambda、边缘节点都能以相同方式运行。

02

12 栏网格,不写坐标

Bootstrap 风格布局。r.Col(7) + r.Col(5) = 12。布局决定写在代码里,而不是像素标尺上。行与列可以任意嵌套。

03

中日韩一等公民

内置 TrueType 字体嵌入。中文、日文、韩文 3 种 CJK 书写系统原样渲染。没有豆腐块(□),没有乱码,也无需第三方补丁。

用数字看速度

在 cjk 发票上计测

1 block = 2 ms

gpdf2 ms
gofpdf15 ms
gopdf20 ms
Maroto v245 ms

基准测试:发票生成 — 中文/日文/韩文文本、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 是一个 MIT 协议、纯 Go 编写的 PDF 生成库。0 个外部依赖,仅使用 Go 标准库。采用 Bootstrap 风格的 12 栏网格声明布局,并通过 TrueType 字体嵌入原生支持中文、日文、韩文。

今天就发布 PDF。

MIT 协议,永久免费。已在 Go 1.22 至 1.26 上测试。一条 go get 即可开始。

$go get github.com/gpdf-dev/gpdf
完整文档