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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Golang利用自定义模板发送邮件的方法详解

    Golang利用自定义模板发送邮件的方法详解

    这篇文章主要给大家介绍了关于Golang利用自定义模板发送邮件的方法,文中通过示例代码将实现的方法介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10
  • 手把手教你如何在Goland中创建和运行项目

    手把手教你如何在Goland中创建和运行项目

    欢迎来到本指南!我们将手把手地教您在Goland中如何创建、配置并运行项目,通过简单的步骤,您将迅速上手这款强大的集成开发环境(IDE),轻松实现您的编程梦想,让我们一起开启这段精彩的旅程吧!
    2024-02-02
  • golang基于Mutex实现可重入锁

    golang基于Mutex实现可重入锁

    锁可重入也就是当前已经获取到锁的goroutine继续调用Lock方法获取锁,Go标准库中提供了sync.Mutex实现了排他锁,但并不是可重入的,所以本文给大家介绍了golang基于Mutex实现可重入锁,文中有详细的代码示例,需要的朋友可以参考下
    2024-03-03
  • 详解Golang中NewTimer计时器的底层实现原理

    详解Golang中NewTimer计时器的底层实现原理

    本文将主要介绍一下Go语言中的NewTimer,首先展示基于NewTimer创建的定时器来实现超时控制。接着通过一系列问题的跟进,展示了NewTimer的底层实现原理,需要的可以参考一下
    2023-05-05
  • Go语言实现服务端消息接收和发送

    Go语言实现服务端消息接收和发送

    这篇文章主要为大家详细介绍了Go语言实现服务端消息接收和发送功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • 使用Go语言创建error的几种方式小结

    使用Go语言创建error的几种方式小结

    Go语言函数(或方法)是支持多个返回值的,因此在Go语言的编程哲学中,函数的返回值的最后一个通常都是error类型,所以本文给大家介绍了使用Go语言创建error的几种方式小结,文中通过代码示例讲解的非常详细,需要的朋友可以参考下
    2024-01-01
  • go语言算法题解二叉树的最小深度

    go语言算法题解二叉树的最小深度

    这篇文章主要为大家介绍了go语言算法题解二叉树的最小深度示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 详解Go语言中Goroutine退出机制的原理及使用

    详解Go语言中Goroutine退出机制的原理及使用

    goroutine是Go语言提供的语言级别的轻量级线程,在我们需要使用并发时,我们只需要通过 go 关键字来开启 goroutine 即可。本文就来详细讲讲Goroutine退出机制的原理及使用,感兴趣的可以了解一下
    2022-07-07
  • 一文带你了解Golang中的泛型

    一文带你了解Golang中的泛型

    泛型是一种可以编写独立于使用的特定类型的代码的方法,可以通过编写函数或类型来使用一组类型中的任何一个,下面就来和大家聊聊Golang中泛型的使用吧
    2023-07-07
  • 用GO实现IP门禁优化网络流量管理

    用GO实现IP门禁优化网络流量管理

    这篇文章主要为大家介绍了用GO实现IP门禁优化网络流量管理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12

最新评论