使用 Go (Golang) 生成 PDF 报告:库与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

使用 Go (Golang) 生成 PDF 报告:库概览与代码示例



Go (Golang) 是一种现代编译型语言,越来越多地被用于创建高负载服务器应用和微服务。这类系统中的典型任务之一是生成 PDF 报告(如发票、凭证、统计仪表盘)。在本文中,我们将介绍三种流行的 Go PDF 生成库、它们的优势,并提供现成的代码示例。



1. gofpdf —— 从零创建 PDF 的经典库



gofpdf 库(目前以 jung-kurt/gofpdf 或分支 go-pdf/fpdf 的形式发展)是著名 PHP 库 FPDF 的一个移植版本。它无需外部依赖,仅使用 Go 标准库即可创建 PDF 文档。



安装

go get github.com/jung-kurt/gofpdf


示例:简单的发票

package main

import ( "github.com/jung-kurt/gofpdf")

func main() { pdf := gofpdf.New("P", "mm", "A4", "") pdf.SetFont("Arial", "B", 16) pdf.AddPage() pdf.CellFormat(190, 10, "发票编号 #123 日期 2025-01-01", "0", 1, "C", false, 0, "") pdf.SetFont("Arial", "", 12) pdf.Ln(10) pdf.CellFormat(190, 10, "商品:笔记本电脑", "1", 1, "L", false, 0, "") pdf.CellFormat(190, 10, "价格:120,000 卢布", "1", 1, "L", false, 0, "") pdf.CellFormat(190, 10, "总计:120,000 卢布", "1", 1, "L", false, 0, "") err := pdf.OutputFileAndClose("invoice.pdf") if err != nil { panic(err) }}


优点:依赖最少,对每个元素有完全控制,支持 Unicode(通过 AddUTF8Font)。
缺点:低级 API —— 对于复杂报告,需要手动编写大量代码。



2. maroto —— 支持表格和样式的高级生成库



Maroto 构建在 gofpdf 之上,但提供了更便捷的 API:表格、网格、自动对齐以及内置字体支持。非常适合典型报告:发票、列表、价目表。



安装

go get github.com/johnfercher/maroto/v2


示例:数据表格

package main

import ( "github.com/johnfercher/maroto/v2/pkg/core" "github.com/johnfercher/maroto/v2/pkg/props" "github.com/johnfercher/maroto/v2")

func main() { m := maroto.New() m.SetPageMargins(10, 10, 10) // 标题 m.Row(10, func() { m.Col(12, func() { m.Text("销售报告", props.Text{ Style: props.Bold, Size: 16, Align: props.Center, }) }) }) // 表格 header := []string{"商品", "数量", "价格"} data := [][]string{ {"显示器", "2", "30,000"}, {"键盘", "5", "7,500"}, } m.TableList(header, data, props.TableList{ HeaderProp: props.TableListContent{ Style: props.Bold, Size: 10, }, ContentProp: props.TableListContent{ Size: 9, }, }) document, _ := m.Generate() document.Save("report.pdf")}


优点:开发速度快,内置样式,自动分页。
缺点:对于非标准布局,灵活性较低。



3. wkhtmltopdf —— 通过 Go 封装将 HTML 转换为 PDF



如果您已有 HTML 模板(例如基于 Bootstrap 的),最简单的方法是使用 wkhtmltopdf。这不是一个 Go 库,而是一个命令行工具,但 Go 有对应的封装 go-wkhtmltopdf。它接收 HTML 字符串并返回 PDF。



安装

# 首先安装 wkhtmltopdf:https://wkhtmltopdf.org/downloads.htmlgo get github.com/SebastiaanKlippert/go-wkhtmltopdf

推荐