文章目录
-
- [1. 安装`gofpdf`包](#1. 安装
gofpdf
包) - [2. 基本用法](#2. 基本用法)
-
- [2.1 创建PDF实例](#2.1 创建PDF实例)
- [2.2 添加页面](#2.2 添加页面)
- [2.3 设置字体](#2.3 设置字体)
- [2.4 添加文本](#2.4 添加文本)
- [2.5 添加图像](#2.5 添加图像)
- [3. 生成PDF文件](#3. 生成PDF文件)
- [4. 示例代码详解](#4. 示例代码详解)
- [5. 代码解析](#5. 代码解析)
-
- [5.1 主函数`generatePdf`](#5.1 主函数
generatePdf
) - [5.2 辅助函数`addPdfContent`](#5.2 辅助函数
addPdfContent
) - [5.3 辅助函数`setPdfLogo`](#5.3 辅助函数
setPdfLogo
)
- [5.1 主函数`generatePdf`](#5.1 主函数
- [6. 总结](#6. 总结)
- [1. 安装`gofpdf`包](#1. 安装
在现代Web开发中,生成PDF文件是一个常见的需求,无论是生成报告、发票还是其他类型的文档,PDF因其跨平台的特性和丰富的格式支持而成为首选格式。本文将详细介绍如何使用Go语言中的 gofpdf
包来生成PDF文件,并通过具体的代码示例来展示其功能和用法。
1. 安装gofpdf
包
首先,我们需要安装gofpdf
包。可以通过以下命令来安装:
sh
go get -u github.com/jung-kurt/gofpdf
2. 基本用法
2.1 创建PDF实例
创建一个新的PDF实例是使用gofpdf
的第一步。我们可以指定页面的方向(纵向或横向)、单位(毫米或英寸)和纸张大小(A4、Letter等)。
go
pdf := gofpdf.New("P", "mm", "A4", "")
"P"
表示页面方向为纵向(Portrait),也可以使用"L"
表示横向(Landscape)。"mm"
表示单位为毫米,也可以使用"pt"
(点)、"in"
(英寸)等。"A4"
表示纸张大小为A4,也可以使用"Letter"
等其他标准纸张大小。
2.2 添加页面
创建PDF实例后,可以使用 AddPage
方法添加新的页面。
go
pdf.AddPage()
2.3 设置字体
gofpdf
支持多种字体,包括标准的PDF字体和自定义的TrueType字体。为了支持中文,我们需要加载自定义的字体文件。
go
pdf.AddUTF8Font("NotoSansSC", "", fontPathLight)
pdf.SetFont("NotoSansSC", "", 10)
AddUTF8Font
方法用于添加自定义的UTF-8字体。SetFont
方法用于设置当前使用的字体。
2.4 添加文本
使用 MultiCell
方法可以添加多行文本。MultiCell
方法允许指定文本的宽度、高度、内容、边框、对齐方式等。
go
pdf.SetXY(22, 207)
pdf.SetTextColor(255, 255, 255)
pdf.MultiCell(0, 6, baseInfo, "", "", false)
SetXY
方法用于设置文本的起始位置。SetTextColor
方法用于设置文本的颜色。MultiCell
方法用于添加多行文本。
2.5 添加图像
使用 ImageOptions
方法可以添加图像。ImageOptions
方法允许指定图像的路径、位置、大小、是否旋转等。
go
pdf.ImageOptions(
"./static/base.png",
0, 0,
210, 0,
false,
gofpdf.ImageOptions{ImageType: "png", ReadDpi: true},
0,
"",
)
ImageOptions
方法用于添加图像。- 第一个参数是图像文件的路径。
- 后面的参数分别表示图像的X坐标、Y坐标、宽度、高度、是否旋转、图像选项、链接等。
3. 生成PDF文件
最后,使用 OutputFileAndClose
方法将PDF文件输出到指定的路径。
go
pdfPath := "./temp-files/" + name + ".pdf"
err = pdf.OutputFileAndClose(pdfPath)
if err != nil {
return
}
4. 示例代码详解
以下是一个完整的示例代码,展示了如何使用gofpdf
生成包含文本和图像的PDF文件。
go
package pdf
import (
"github.com/jung-kurt/gofpdf"
"os"
)
const (
fontPathBold = "./font/PingFang-SC-Bold.ttf"
fontPathLight = "./font/PingFang-SC-Light.ttf"
)
// generatePdf 生成PDF文件
func generatePdf(name, baseInfo, content string, images []string) (pdfPath string, err error) {
// 删除图片
defer func() {
for _, image := range images {
os.Remove(image)
}
}()
// 创建PDF实例
pdf := gofpdf.New("P", "mm", "A4", "")
// 生成封面
pdf.AddPage()
// 读取图像文件
pdf.ImageOptions(
"./static/base.png",
0, 0,
210, 0,
false,
gofpdf.ImageOptions{ImageType: "png", ReadDpi: true},
0,
"",
)
// 添加字体
pdf.AddUTF8Font("NotoSansSC", "", fontPathLight)
pdf.SetFont("NotoSansSC", "", 10)
// 添加基础信息
pdf.SetXY(22, 207)
pdf.SetTextColor(255, 255, 255)
pdf.MultiCell(0, 6, baseInfo, "", "", false)
// 添加内容
addPdfContent(pdf, "内容1", content)
// 添加图片
for _, image := range images {
pdf.AddPage()
setPdfLogo(pdf)
pdf.ImageOptions(
image,
12, 23,
180, 0,
false,
gofpdf.ImageOptions{ImageType: "png", ReadDpi: true},
0,
"",
)
}
// 输出PDF文件
pdfPath = "./temp-files/" + name + ".pdf"
err = pdf.OutputFileAndClose(pdfPath)
if err != nil {
return
}
return
}
// addPdfContent 添加PDF内容
func addPdfContent(pdf *gofpdf.Fpdf, title, content string) {
// 添加字体
pdf.AddUTF8Font("NotoSansSC", "", fontPathBold)
pdf.SetFont("NotoSansSC", "", 10)
// 添加新页面
pdf.AddPage()
setPdfLogo(pdf)
// 设置文本颜色和大小
pdf.SetTextColor(0, 0, 0)
pdf.SetFontSize(20)
// 添加标题
pdf.SetXY(10, 10)
pdf.MultiCell(0, 5, title, "", "", false)
// 添加内容
pdf.AddUTF8Font("NotoSansSC", "", fontPathLight)
pdf.SetFont("NotoSansSC", "", 12)
pdf.SetFontSize(12)
pdf.SetXY(10, 23)
pdf.MultiCell(0, 5, content, "", "", false)
}
// setPdfLogo 设置PDF的logo
func setPdfLogo(pdf *gofpdf.Fpdf) {
// 读取图像文件
pdf.ImageOptions(
"./static/logo.png",
180, 9,
22, 0,
false,
gofpdf.ImageOptions{ImageType: "png", ReadDpi: true},
0,
"",
)
}
5. 代码解析
5.1 主函数generatePdf
- 创建PDF实例 :使用
gofpdf.New
方法创建一个新的PDF实例。 - 生成封面 :添加一个新页面,并使用
ImageOptions
方法添加背景图像。 - 添加基础信息 :设置字体和文本颜色,使用
MultiCell
方法添加基础信息。 - 添加内容 :调用
addPdfContent
方法添加内容。 - 添加图片 :遍历
images
列表,为每张图片添加一个新页面,并使用ImageOptions
方法添加图像。 - 输出PDF文件 :使用
OutputFileAndClose
方法将PDF文件输出到指定路径。
5.2 辅助函数addPdfContent
- 添加字体 :使用
AddUTF8Font
方法添加自定义字体。 - 添加新页面 :使用
AddPage
方法添加一个新页面。 - 设置文本颜色和大小 :使用
SetTextColor
和SetFontSize
方法设置文本颜色和大小。 - 添加标题 :使用
MultiCell
方法添加标题。 - 添加内容 :使用
MultiCell
方法添加内容。
5.3 辅助函数setPdfLogo
- 添加logo :使用
ImageOptions
方法添加logo图像。
6. 总结
通过本文的介绍,我们详细了解了如何使用gofpdf
包生成PDF文件。gofpdf
提供了丰富的API,可以方便地添加文本、图像、表格等内容,支持多种字体和格式。希望本文能帮助你在实际项目中更好地使用gofpdf
生成高质量的PDF文件。
参考资料:
gofpdf
如果你有任何问题或建议,欢迎留言交流!