文章目录
- 1. 安装`gofpdf`包
- 2. 基本用法
- 2.1 创建PDF实例
- 2.2 添加页面
- 2.3 设置字体
- 2.4 添加文本
- 2.5 添加图像
- 3. 生成PDF文件
- 4. 示例代码详解
- 5. 代码解析
- 5.1 主函数`generatePdf`
- 5.2 辅助函数`addPdfContent`
- 5.3 辅助函数`setPdfLogo`
- 6. 总结
在现代Web开发中,生成PDF文件是一个常见的需求,无论是生成报告、发票还是其他类型的文档,PDF因其跨平台的特性和丰富的格式支持而成为首选格式。本文将详细介绍如何使用Go语言中的
gofpdf
包来生成PDF文件,并通过具体的代码示例来展示其功能和用法。
1. 安装gofpdf
包
首先,我们需要安装gofpdf
包。可以通过以下命令来安装:
go get -u github.com/jung-kurt/gofpdf
2. 基本用法
2.1 创建PDF实例
创建一个新的PDF实例是使用gofpdf
的第一步。我们可以指定页面的方向(纵向或横向)、单位(毫米或英寸)和纸张大小(A4、Letter等)。
pdf := gofpdf.New("P", "mm", "A4", "")
"P"
表示页面方向为纵向(Portrait),也可以使用"L"
表示横向(Landscape)。"mm"
表示单位为毫米,也可以使用"pt"
(点)、"in"
(英寸)等。"A4"
表示纸张大小为A4,也可以使用"Letter"
等其他标准纸张大小。
2.2 添加页面
创建PDF实例后,可以使用 AddPage
方法添加新的页面。
pdf.AddPage()
2.3 设置字体
gofpdf
支持多种字体,包括标准的PDF字体和自定义的TrueType字体。为了支持中文,我们需要加载自定义的字体文件。
pdf.AddUTF8Font("NotoSansSC", "", fontPathLight)
pdf.SetFont("NotoSansSC", "", 10)
AddUTF8Font
方法用于添加自定义的UTF-8字体。SetFont
方法用于设置当前使用的字体。
2.4 添加文本
使用 MultiCell
方法可以添加多行文本。MultiCell
方法允许指定文本的宽度、高度、内容、边框、对齐方式等。
pdf.SetXY(22, 207)
pdf.SetTextColor(255, 255, 255)
pdf.MultiCell(0, 6, baseInfo, "", "", false)
SetXY
方法用于设置文本的起始位置。SetTextColor
方法用于设置文本的颜色。MultiCell
方法用于添加多行文本。
2.5 添加图像
使用 ImageOptions
方法可以添加图像。ImageOptions
方法允许指定图像的路径、位置、大小、是否旋转等。
pdf.ImageOptions("./static/base.png",0, 0,210, 0,false,gofpdf.ImageOptions{ImageType: "png", ReadDpi: true},0,"",
)
ImageOptions
方法用于添加图像。- 第一个参数是图像文件的路径。
- 后面的参数分别表示图像的X坐标、Y坐标、宽度、高度、是否旋转、图像选项、链接等。
3. 生成PDF文件
最后,使用 OutputFileAndClose
方法将PDF文件输出到指定的路径。
pdfPath := "./temp-files/" + name + ".pdf"
err = pdf.OutputFileAndClose(pdfPath)
if err != nil {return
}
4. 示例代码详解
以下是一个完整的示例代码,展示了如何使用gofpdf
生成包含文本和图像的PDF文件。
package pdfimport ("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
如果你有任何问题或建议,欢迎留言交流!