Go中的PDF生成:库概览与实践指南

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

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

开始课程

Go (Golang) 中的PDF生成:工具与库完整概览



现代Web应用程序和微服务通常需要生成PDF文档:报告、账单、发票、证书或简单的数据导出。Go语言为这项任务提供了几个成熟的解决方案。在本文中,我们将详细分析主要的库、它们的功能、使用示例,并帮助您为pythonlib.ru上的项目选择合适的工具。



为什么使用Go生成PDF?



Go (Golang) 是一种编译型、静态类型语言,以其高性能和简洁性而闻名。在生成PDF时,它具有以下优势:

  • 高速 — Go二进制文件运行速度快,内存使用效率高。
  • 部署简单 — 单个可执行文件,无外部依赖(wkhtmltopdf情况除外)。
  • 内置并发支持 — 可以同时处理多个PDF生成请求。
  • 跨平台 — 一次构建,即可在Linux、Windows、macOS上运行。


Go中用于处理PDF的主要库



我们将探讨三种流行的方法:纯Go实现(gofpdf)、专业商业库(uniPDF)以及HTML转PDF(wkhtmltopdf)。



1. gofpdf — 简单轻量的库



gofpdf(现在为github.com/jung-kurt/gofpdf)是最早且最流行的纯Go创建PDF的库之一。它不需要外部依赖,允许以编程方式绘制文本、线条、图像和表格。



创建包含文本和图像的简单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, "你好,世界!") // 添加图像(Logo) pdf.ImageOptions("logo.png", 10, 20, 50, 0, false, gofpdf.ImageOptions{ImageType: "PNG", ReadDpi: true}, 0, "") // 保存到文件 err := pdf.OutputFileAndClose("output.pdf") if err != nil { panic(err) }}


优点:

  • 完全基于Go — 无需外部程序。
  • 轻量且安装简单。
  • 通过内置字体支持Unicode(包括西里尔字母)。

缺点:

  • 对复杂布局的支持有限(例如,没有现成的复杂表格解决方案)。
  • 手动定位元素 — 适用于简单文档。


2. UniPDF — 适用于复杂任务的专业解决方案



UniPDF(来自github.com/unidoc/unipdf/v3)是一个强大的商业库,提供对PDF几乎完全的控制。它支持创建、编辑、转换和从PDF中提取数据。对于教育性和非商业性项目,存在一个有限制的免费版本。



创建带表格的报告示例:



package main

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

func main() { // 指定许可证(免费用于测试) license.SetMeteredKey("您的密钥") c := creator.New() c.NewPage() // 标题 chapter := c.NewChapter("月度报告") chapter.Add(c.NewParagraph("销售数据")) // 表格 table := c.NewTable(3) table.SetColumnWidths(100, 100, 100) headers := []string{"产品", "数量", "金额"} for _, h := range headers { cell := table.NewCell() cell.SetBackgroundColor(creator.Col

推荐