Go语言生成PDF报告:库概览与代码示例

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

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

开始课程

Go (Golang) 生成PDF报告:库概览与实践示例



Go (Golang) 是一种现代编译型语言,非常适合构建高负载服务器应用、微服务和命令行工具。Web开发中常见任务之一是生成PDF格式的报告:账单、发票、分析仪表板或证书。在本文中,我们将介绍三种流行的Go语言PDF处理库,探讨其功能,并提供可运行的代码示例。



为什么选择Go生成PDF?

Go具有多项优势:高性能、部署简单(单一二进制文件)、内置并发支持以及丰富的标准库。生成PDF时无需安装庞大的运行时环境(如Java或.NET),这使得基于Go的解决方案既紧凑又快速。然而,与拥有ReportLab等强大库的Python不同,Go的PDF生态系统更加多样化,工具的选择取决于报告的复杂程度。



1. gofpdf — 基础PDF生成

gofpdf 是著名PHP库FPDF的一个移植版本。它允许您“从零开始”创建PDF文档:添加文本、图像、线条、表格和字体。该库不支持HTML模板,因此所有布局都需要通过编程方式指定。



安装:

go get github.com/jung-kurt/gofpdf


示例:创建简单发票

package main

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

func main() { pdf := gofpdf.New("P", "mm", "A4", "") pdf.AddPage() pdf.SetFont("Arial", "B", 16) pdf.Cell(40, 10, "发票号 #123") pdf.Ln(12) pdf.SetFont("Arial", "", 12) pdf.Cell(40, 10, "日期: 2024-01-15") pdf.Ln(10) pdf.Cell(40, 10, "商品: 笔记本电脑") pdf.Ln(10) pdf.Cell(40, 10, "金额: 50,000 卢布") err := pdf.OutputFileAndClose("invoice.pdf") if err != nil { panic(err) }}


优点:轻量级,完全控制定位,通过TTF字体支持Unicode。
缺点:缺乏内置HTML支持,创建复杂布局时较为困难。



2. maroto — 简化报告创建

Maroto 构建于gofpdf之上,但提供了用于创建报告的高级API。您可以使用“网格”、“行”、“列”、“表格”等概念。这类似于使用CSS框架。



安装:

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.NewMaroto(maroto.WithPageSize("A4")) m.RegisterHeader(func() { m.Row(20, func() { m.Col(12, func() { m.Text("销售报告", props.Text{Bold: true, Size: 16}) }) }) })

headers := []string{"商品", "数量", "价格"} contents := [][]string{ {"笔记本电脑", "2", "100000"}, {"鼠标", "5", "2500"}, }

m.Table(headers, contents, props.Table{}) document, _ := m.Generate() _ = document.Save("report.pdf")}


优点:声明式风格,自动对齐,内置表格和图表支持。
缺点:对于非标准布局的灵活性不如gofpdf。



3. wkhtmltopdf — HTML转PDF

如果您需要将HTML模板转换为PDF(例如,包含CSS样式),请使用wkhtmltopdf——这是对wkhtmltopdf工具(基于WebKit)的封装。这不是一个纯粹的Go库,但它允许您利用HTML/CSS的全部功能来设计报告。



推荐