文章目录
-
- [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
如果你有任何问题或建议,欢迎留言交流!
