使用 Go 语言生成样式雅观的 PDF 文件

打印 上一主题 下一主题

主题 989|帖子 989|积分 2969

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
文章精选推荐

1 JetBrains Ai assistant 编程工具让你的工作效率翻倍
2 Extra Icons:JetBrains IDE的图标增强神器
3 IDEA插件推荐-SequenceDiagram,自动生成时序图
4 BashSupport Pro 这个ides插件主要是用来干嘛的 ?
5 IDEA必装的插件:Spring Boot Helper的使用与功能特点
6 Ai assistant ,又是一个写代码神器
7 Cursor 设备ID修改器,你的Cursor又可以继承试用了

文章正文

使用 Go 语言生成样式雅观的 PDF 文件是一个常见的需求,尤其是在报告生成、发票、合同等场景中。
荣幸的是,Go 语言有几个强盛的库,可以帮助开辟者快速生成雅观的 PDF 文件。
最常用的库之一是 github.com/jung-kurt/gofpdf,它提供了丰富的 API 来创建各种格式的 PDF 文件。
1. 安装 gofpdf

首先,你必要安装 gofpdf 库。可以使用 go get 来安装它:
  1. go get -u github.com/jung-kurt/gofpdf
复制代码
2. 使用 gofpdf 生成 PDF

gofpdf 提供了一个简朴的 API 来生成 PDF 文件。你可以界说页面的尺寸、字体、颜色、边距等,还可以插入文本、图片、表格等内容。
2.1 创建一个基本的 PDF 示例

  1. package main
  2. import (
  3.         "github.com/jung-kurt/gofpdf"
  4.         "os"
  5. )
  6. func main() {
  7.         // 创建一个新的 PDF 对象
  8.         pdf := gofpdf.New("P", "mm", "A4", "") // P: 纵向,mm: 毫米单位,A4: 页面大小
  9.         // 添加一页
  10.         pdf.AddPage()
  11.         // 设置字体
  12.         pdf.SetFont("Arial", "B", 16)
  13.         // 写入标题
  14.         pdf.Cell(40, 10, "Hello, Go PDF!")
  15.         // 输出到文件
  16.         err := pdf.OutputFileAndClose("output.pdf")
  17.         if err != nil {
  18.                 panic(err)
  19.         }
  20. }
复制代码
2.2 设置字体和样式

你可以设置不同的字体、大小、颜色等。
  1. package main
  2. import (
  3.         "github.com/jung-kurt/gofpdf"
  4.         "os"
  5. )
  6. func main() {
  7.         pdf := gofpdf.New("P", "mm", "A4", "")
  8.         // 添加一页
  9.         pdf.AddPage()
  10.         // 设置字体为 Arial,常规样式,大小为 14
  11.         pdf.SetFont("Arial", "", 14)
  12.         // 设置字体颜色为蓝色
  13.         pdf.SetTextColor(0, 0, 255)
  14.         // 写入文本
  15.         pdf.Cell(40, 10, "This is a blue text.")
  16.         // 设置字体为 Times New Roman,粗体,大小为 12
  17.         pdf.SetFont("Times", "B", 12)
  18.         pdf.SetTextColor(255, 0, 0) // 红色
  19.         pdf.Ln(10)
  20.         pdf.Cell(40, 10, "This is a red bold Times font text.")
  21.         // 输出 PDF 到文件
  22.         err := pdf.OutputFileAndClose("styled_output.pdf")
  23.         if err != nil {
  24.                 panic(err)
  25.         }
  26. }
复制代码
2.3 添加图片

你还可以在 PDF 中插入图片。gofpdf 支持 JPEG、PNG 和 GIF 格式的图片。
  1. package main
  2. import (
  3.         "github.com/jung-kurt/gofpdf"
  4. )
  5. func main() {
  6.         pdf := gofpdf.New("P", "mm", "A4", "")
  7.         // 添加一页
  8.         pdf.AddPage()
  9.         // 插入图片
  10.         // 参数: 图片文件路径, x 坐标, y 坐标, 宽度, 高度
  11.         pdf.Image("example.jpg", 10, 10, 50, 50)
  12.         // 输出到文件
  13.         err := pdf.OutputFileAndClose("image_output.pdf")
  14.         if err != nil {
  15.                 panic(err)
  16.         }
  17. }
复制代码
2.4 表格和复杂结构

gofpdf 也支持创建表格,以下是一个简朴的表格生成示例:
  1. package main
  2. import (
  3.         "github.com/jung-kurt/gofpdf"
  4. )
  5. func createTable(pdf *gofpdf.Fpdf) {
  6.         // 设置字体
  7.         pdf.SetFont("Arial", "B", 12)
  8.         // 表头
  9.         headers := []string{"ID", "Name", "Age"}
  10.         for _, header := range headers {
  11.                 pdf.Cell(40, 10, header)
  12.         }
  13.         pdf.Ln(10) // 换行
  14.         // 表格内容
  15.         data := [][]string{
  16.                 {"1", "Alice", "23"},
  17.                 {"2", "Bob", "30"},
  18.                 {"3", "Charlie", "25"},
  19.         }
  20.         for _, row := range data {
  21.                 for _, cell := range row {
  22.                         pdf.Cell(40, 10, cell)
  23.                 }
  24.                 pdf.Ln(10) // 换行
  25.         }
  26. }
  27. func main() {
  28.         // 创建 PDF 对象
  29.         pdf := gofpdf.New("P", "mm", "A4", "")
  30.         // 添加一页
  31.         pdf.AddPage()
  32.         // 创建表格
  33.         createTable(pdf)
  34.         // 输出到文件
  35.         err := pdf.OutputFileAndClose("table_output.pdf")
  36.         if err != nil {
  37.                 panic(err)
  38.         }
  39. }
复制代码
2.5 添加页脚和页码

在多页文档中,你可能渴望添加页脚或页码。可以通过自界说函数来实现这一点。
  1. package main
  2. import (
  3.         "github.com/jung-kurt/gofpdf"
  4. )
  5. func addFooter(pdf *gofpdf.Fpdf) {
  6.         // 设置字体
  7.         pdf.SetFont("Arial", "I", 8)
  8.         // 设置位置
  9.         pdf.SetY(-15) // 距离页面底部 15mm
  10.         // 页脚内容
  11.         pdf.Cell(0, 10, "Page "+strconv.Itoa(pdf.PageNo()), 0, 0, "C")
  12. }
  13. func main() {
  14.         pdf := gofpdf.New("P", "mm", "A4", "")
  15.         // 添加一页
  16.         pdf.AddPage()
  17.         // 设置正文内容
  18.         pdf.SetFont("Arial", "", 12)
  19.         pdf.Cell(40, 10, "This is a PDF with a footer!")
  20.         // 添加页脚
  21.         addFooter(pdf)
  22.         // 输出 PDF
  23.         err := pdf.OutputFileAndClose("footer_output.pdf")
  24.         if err != nil {
  25.                 panic(err)
  26.         }
  27. }
复制代码
2.6 更多样式和结构

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


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

Go 的 gofpdf 库原生不支持中笔墨符,但你可以通过加载 TTF 字体文件来支持中笔墨符。
首先,确保你有一个支持中文的 TTF 字体文件(例如,SimHei.ttf)。
  1. package main
  2. import (
  3.         "github.com/jung-kurt/gofpdf"
  4.         "log"
  5. )
  6. func main() {
  7.         // 创建一个新的 PDF 对象
  8.         pdf := gofpdf.New("P", "mm", "A4", "")
  9.         // 添加页面
  10.         pdf.AddPage()
  11.         // 添加中文字体
  12.         err := pdf.AddTTFFont("simhei", "./SimHei.ttf")
  13.         if err != nil {
  14.                 log.Fatal(err)
  15.         }
  16.         // 设置字体
  17.         pdf.SetFont("simhei", "", 14)
  18.         // 写入中文内容
  19.         pdf.Cell(40, 10, "你好,Go PDF!")
  20.         // 输出到文件
  21.         err = pdf.OutputFileAndClose("chinese_output.pdf")
  22.         if err != nil {
  23.                 log.Fatal(err)
  24.         }
  25. }
复制代码

3. 总结

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


  • 基础样式:字体、颜色、文本对齐、图片插入。
  • 复杂结构:表格、页脚、页码等。
  • 高级功能:中文支持、矢量图形等。
gofpdf 是一个功能强盛的库,可以或许满足大部门 PDF 生成需求,同时也具有极好的扩展性,可以满足各种业务场景的需求。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81428

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表