Go (Golang) 中的 PDF 生成:库与示例

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

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

开始课程

Go (Golang) 中的 PDF 生成:库与工具概述



创建 PDF 文档是 Web 开发中的常见任务之一。在 Go (Golang) 生态系统中,有多个成熟的库,可用于生成从简单报告到包含表格、图形和字体的复杂多页文档的 PDF。在本文中,我们将介绍主要工具、它们的功能,并提供实用的代码示例。



为什么选择 Go 进行 PDF 生成?

Go 是一种编译型语言,具有出色的性能和简单的并发模型。对于 PDF 生成任务,这意味着:

  • 快速处理大量数据
  • 易于与 Web 服务器集成 (net/http)
  • 能够并行生成多个文档
  • 无外部依赖(二进制文件包含所有必需内容)


Go 中用于处理 PDF 的主要库



1. gofpdf — 简单且流行的库

gofpdf 是著名的 PHP 库 FPDF 在 Go 中的移植版本。它提供了一个简单的 API,用于创建包含基本元素的 PDF:文本、线条、矩形、图像和表格。该库无需外部依赖,并通过嵌入字体支持 Unicode。



使用 gofpdf 创建简单 PDF 的示例:

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, "你好,世界!") pdf.OutputFileAndClose("hello.pdf")}


gofpdf 的主要功能:

  • 支持 UTF-8(需要嵌入 TrueType 字体)
  • 自动分页
  • 矢量图形(线条、曲线、填充)
  • 嵌入图像 (JPEG, PNG, GIF)
  • 动态数据表格


2. UniPDF — 功能强大的商业库

UniPDF(前身为 FoxyUtils)是一个用于在 Go 中处理 PDF 的专业解决方案。该库是开源的,但商业使用需要许可证。UniPDF 不仅支持创建,还支持编辑、转换和从 PDF 中提取数据。



使用 UniPDF 创建 PDF 的示例:

package main

import ( "os" "github.com/unidoc/unipdf/v3/creator")

func main() { c := creator.New() c.NewPage() // 添加文本 text := c.NewStyledParagraph() text.Append("UniPDF 文档示例") text.SetFontSize(18) c.Draw(text) // 保存 c.WriteToFile("unipdf_example.pdf")}


UniPDF 的独特功能:

  • 完全解析和编辑现有 PDF
  • 支持表单、注释和书签
  • 将 HTML 转换为 PDF
  • 处理数字签名
  • 提取文本和图像


3. Maroto — 基于可视化组件的 PDF 生成器

Maroto 构建在 gofpdf 之上,并提供了一种更高级的方法,使用“网格”概念。这对于创建报告、发票和其他结构化文档非常方便。



使用 Maroto 的示例:

package main

import ( "fmt" "github.com/johnfercher/maroto/v2/pkg/consts/align" "github.com/johnfercher/maroto/v2/pkg/consts/fontstyle" "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.Row(20, func() { m.Col(12, func() { m.Text("发票号 #123", props.Text{ Style: fontstyle.Bold, Align: align.Center, }) }) }) document, err := m.Generate() if err != nil {

推荐