Go语言实现生成样式美观的PDF文件

 更新时间:2025年01月20日 09:09:14   作者:Ai 编码  
使用 Go 语言生成样式美观的 PDF 文件是一个常见的需求,尤其是在报告生成、发票、合同等场景中,下面就跟随小编一起来学习一下具体实现方法吧

使用 Go 语言生成样式美观的 PDF 文件是一个常见的需求,尤其是在报告生成、发票、合同等场景中。

幸运的是,Go 语言有几个强大的库,可以帮助开发者快速生成美观的 PDF 文件。

最常用的库之一是 github.com/jung-kurt/gofpdf,它提供了丰富的 API 来创建各种格式的 PDF 文件。

1. 安装 gofpdf

首先,你需要安装 gofpdf 库。可以使用 go get 来安装它:

go get -u github.com/jung-kurt/gofpdf

2. 使用 gofpdf 生成 PDF

gofpdf 提供了一个简单的 API 来生成 PDF 文件。你可以定义页面的尺寸、字体、颜色、边距等,还可以插入文本、图片、表格等内容。

2.1 创建一个基本的 PDF 示例

package main

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

func main() {
	// 创建一个新的 PDF 对象
	pdf := gofpdf.New("P", "mm", "A4", "") // P: 纵向,mm: 毫米单位,A4: 页面大小

	// 添加一页
	pdf.AddPage()

	// 设置字体
	pdf.SetFont("Arial", "B", 16)

	// 写入标题
	pdf.Cell(40, 10, "Hello, Go PDF!")

	// 输出到文件
	err := pdf.OutputFileAndClose("output.pdf")
	if err != nil {
		panic(err)
	}
}

2.2 设置字体和样式

你可以设置不同的字体、大小、颜色等。

package main

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

func main() {
	pdf := gofpdf.New("P", "mm", "A4", "")

	// 添加一页
	pdf.AddPage()

	// 设置字体为 Arial,常规样式,大小为 14
	pdf.SetFont("Arial", "", 14)

	// 设置字体颜色为蓝色
	pdf.SetTextColor(0, 0, 255)

	// 写入文本
	pdf.Cell(40, 10, "This is a blue text.")

	// 设置字体为 Times New Roman,粗体,大小为 12
	pdf.SetFont("Times", "B", 12)
	pdf.SetTextColor(255, 0, 0) // 红色
	pdf.Ln(10)
	pdf.Cell(40, 10, "This is a red bold Times font text.")

	// 输出 PDF 到文件
	err := pdf.OutputFileAndClose("styled_output.pdf")
	if err != nil {
		panic(err)
	}
}

2.3 添加图片

你还可以在 PDF 中插入图片。gofpdf 支持 JPEG、PNG 和 GIF 格式的图片。

package main

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

func main() {
	pdf := gofpdf.New("P", "mm", "A4", "")

	// 添加一页
	pdf.AddPage()

	// 插入图片
	// 参数: 图片文件路径, x 坐标, y 坐标, 宽度, 高度
	pdf.Image("example.jpg", 10, 10, 50, 50)

	// 输出到文件
	err := pdf.OutputFileAndClose("image_output.pdf")
	if err != nil {
		panic(err)
	}
}

2.4 表格和复杂布局

gofpdf 也支持创建表格,以下是一个简单的表格生成示例:

package main

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

func createTable(pdf *gofpdf.Fpdf) {
	// 设置字体
	pdf.SetFont("Arial", "B", 12)

	// 表头
	headers := []string{"ID", "Name", "Age"}
	for _, header := range headers {
		pdf.Cell(40, 10, header)
	}
	pdf.Ln(10) // 换行

	// 表格内容
	data := [][]string{
		{"1", "Alice", "23"},
		{"2", "Bob", "30"},
		{"3", "Charlie", "25"},
	}

	for _, row := range data {
		for _, cell := range row {
			pdf.Cell(40, 10, cell)
		}
		pdf.Ln(10) // 换行
	}
}

func main() {
	// 创建 PDF 对象
	pdf := gofpdf.New("P", "mm", "A4", "")

	// 添加一页
	pdf.AddPage()

	// 创建表格
	createTable(pdf)

	// 输出到文件
	err := pdf.OutputFileAndClose("table_output.pdf")
	if err != nil {
		panic(err)
	}
}

2.5 添加页脚和页码

在多页文档中,你可能希望添加页脚或页码。可以通过自定义函数来实现这一点。

package main

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

func addFooter(pdf *gofpdf.Fpdf) {
	// 设置字体
	pdf.SetFont("Arial", "I", 8)

	// 设置位置
	pdf.SetY(-15) // 距离页面底部 15mm

	// 页脚内容
	pdf.Cell(0, 10, "Page "+strconv.Itoa(pdf.PageNo()), 0, 0, "C")
}

func main() {
	pdf := gofpdf.New("P", "mm", "A4", "")

	// 添加一页
	pdf.AddPage()

	// 设置正文内容
	pdf.SetFont("Arial", "", 12)
	pdf.Cell(40, 10, "This is a PDF with a footer!")

	// 添加页脚
	addFooter(pdf)

	// 输出 PDF
	err := pdf.OutputFileAndClose("footer_output.pdf")
	if err != nil {
		panic(err)
	}
}

2.6 更多样式和布局

gofpdf 还支持很多其他功能,比如:

  • 设置不同的对齐方式(左对齐、居中、右对齐)
  • 设置边框
  • 使用矢量图形(线条、矩形、圆形)
  • 动态内容的生成
  • 多语言支持(如中文,需要设置支持的字体)

2.7 中文支持

Go 的 gofpdf 库原生不支持中文字符,但你可以通过加载 TTF 字体文件来支持中文字符。

首先,确保你有一个支持中文的 TTF 字体文件(例如,SimHei.ttf)。

package main

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

func main() {
	// 创建一个新的 PDF 对象
	pdf := gofpdf.New("P", "mm", "A4", "")

	// 添加页面
	pdf.AddPage()

	// 添加中文字体
	err := pdf.AddTTFFont("simhei", "./SimHei.ttf")
	if err != nil {
		log.Fatal(err)
	}

	// 设置字体
	pdf.SetFont("simhei", "", 14)

	// 写入中文内容
	pdf.Cell(40, 10, "你好,Go PDF!")

	// 输出到文件
	err = pdf.OutputFileAndClose("chinese_output.pdf")
	if err != nil {
		log.Fatal(err)
	}
}

3. 总结

通过 gofpdf 库,你可以轻松地使用 Go 语言生成美观的 PDF 文件,支持丰富的样式设置、图片、表格、字体等自定义元素。你可以使用它生成报告、发票、合同等各种应用场景中的 PDF 文件。

基础样式:字体、颜色、文本对齐、图片插入。

复杂布局:表格、页脚、页码等。

高级功能:中文支持、矢量图形等。

gofpdf 是一个功能强大的库,能够满足大部分 PDF 生成需求,同时也具有极好的扩展性,可以满足各种业务场景的需求。

到此这篇关于Go语言实现生成样式美观的PDF文件的文章就介绍到这了,更多相关Go生成PDF内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言编译程序从后台运行,不出现dos窗口的操作

    Go语言编译程序从后台运行,不出现dos窗口的操作

    这篇文章主要介绍了Go语言编译程序从后台运行,不出现dos窗口的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Go 语言中映射(Map)使用场景小结

    Go 语言中映射(Map)使用场景小结

    本文介绍了Go语言中映射(Map)的多种应用场景,包括基础的键值存储、集合实现、处理非结构化数据、数据分组、缓存优化和倒排索引等,感兴趣的可以了解一下
    2025-10-10
  • golang socket断点续传大文件的实现方法

    golang socket断点续传大文件的实现方法

    今天小编就为大家分享一篇golang socket断点续传大文件的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Go语言中json序列化优化技巧

    Go语言中json序列化优化技巧

    在Go语言开发中,JSON因其简洁和广泛的兼容性,通常被用作数据交换的主要序列化格式,本文将探讨JSON希望对大家有所帮助序列化的一些局限性,也算是一个小坑吧,并给出一些常用的解决方案,
    2024-11-11
  • graphql---go http请求使用详解

    graphql---go http请求使用详解

    这篇文章主要介绍了graphql---go http请求使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Go+Lua解决Redis秒杀中库存与超卖问题

    Go+Lua解决Redis秒杀中库存与超卖问题

    本文主要介绍了Go+Lua解决Redis秒杀中库存与超卖问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 揭秘Go语言中的反射机制

    揭秘Go语言中的反射机制

    在Go语言中,反射是通过reflect包来实现的,通过使用反射,我们可以在运行时获取对象的类型信息、访问对象的字段和方法、动态调用方法等,反射在很多场景下都非常有用,比如编写通用的代码、实现对象的序列化和反序列化、实现依赖注入等,需要的朋友可以参考下
    2023-10-10
  • go zero微服务实战处理每秒上万次的下单请求

    go zero微服务实战处理每秒上万次的下单请求

    这篇文章主要为大家介绍了go zero微服务实战处理每秒上万次的下单请求示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Go map底层实现与扩容规则和特性分类详细讲解

    Go map底层实现与扩容规则和特性分类详细讲解

    这篇文章主要介绍了Go map底层实现与扩容规则和特性,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-03-03
  • golang中使用aes加密的过程

    golang中使用aes加密的过程

    AES(Advanced Encryption Standard)是一种对称加密算法,适用于加密敏感数据,本文给大家介绍golang中使用aes加密的相关知识,感兴趣的朋友跟随小编一起看看吧
    2025-11-11

最新评论