0

0

如何用Golang生成PDF文档 使用go-pdf库创建PDF文件

P粉602998670

P粉602998670

发布时间:2025-07-16 08:42:02

|

247人浏览过

|

来源于php中文网

原创

使用golang生成pdf文档可通过go-pdf库实现,其步骤为:安装库、初始化配置、添加页面、设置字体、写入内容及输出文件。具体流程包括:1. 运行go get github.com/signintech/gopdf安装库;2. 初始化并设置页面大小为a4;3. 添加页面并通过addttffont加载中文字体避免乱码;4. 使用setfont设置字体和字号,通过cell写入文本;5. 插入图片用image方法指定路径和坐标;6. 表格效果通过moveto和lineto画线结合cell模拟实现;7. 多页处理调用addpage,页边距控制用setx或sety设定坐标,最终通过writepdf保存文件。

如何用Golang生成PDF文档 使用go-pdf库创建PDF文件

用Golang生成PDF文档,其实并不复杂。go-pdf 是一个轻量级的库,适合用来生成简单的 PDF 文件,比如发票、报告或者导出内容为 PDF 格式。

如何用Golang生成PDF文档 使用go-pdf库创建PDF文件

安装 go-pdf 库

在开始之前,你需要先安装 go-pdf 包。打开终端运行:

go get github.com/signintech/gopdf

这个包不需要额外依赖,直接引入就可以用了。

立即学习go语言免费学习笔记(深入)”;

如何用Golang生成PDF文档 使用go-pdf库创建PDF文件

创建一个基础 PDF 文件

使用 go-pdf 创建 PDF 的流程比较简单,主要步骤包括初始化、设置字体、添加页面、写入内容等。

示例代码如下:

如何用Golang生成PDF文档 使用go-pdf库创建PDF文件
package main

import (
    "github.com/signintech/gopdf"
)

func main() {
    pdf := gopdf.GoPdf{}
    pdf.Start(gopdf.Config{PageSize: *gopdf.PageSizeA4}) // 设置 A4 纸张大小
    pdf.AddPage() // 添加一页
    err := pdf.AddTTFFont("wqy", "WenQuanYiZenHei.ttf") // 添加中文字体
    if err != nil {
        panic(err)
    }
    pdf.SetFont("wqy", "", 14) // 设置字体和字号
    pdf.Cell(nil, "你好,世界!") // 写入文本
    pdf.WritePdf("hello.pdf") // 输出到文件
}

几点需要注意:

  • 如果你用的是中文,必须加载中文字体(如文泉驿正黑),否则会乱码。
  • Cell 方法用于写入一段文本,还可以设置宽度、高度等参数。
  • 页面尺寸可以是 A4、Letter 或者自定义。

添加图片和表格内容

除了文本,你可能还需要插入图片或者做一些简单的表格样式。

插入图片

pdf.Image("logo.png", 50, 50, nil) // 在指定位置插入图片

支持 PNG 和 JPEG 格式,注意路径要正确。

mPDF
mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),包括边距、边框、填充、行高、背景颜色等。支持从右到左的语言,并自动检测文档中的RTL字符。转置表格、列表、文本

下载

表格效果模拟

go-pdf 没有内置的表格组件,但可以通过画线 + 文本组合来实现简单的表格:

  • 使用 MoveToLineTo 方法绘制线条
  • 每个单元格用 Cell 填充内容

例如:

pdf.MoveTo(50, 100)
pdf.LineTo(200, 100)
pdf.Stroke()

这样可以画一条横线,配合坐标控制,就能做出表格的边框了。


处理页边距与多页内容

如果你的内容较多,需要分页处理,可以在合适的位置调用 AddPage() 方法。

页边距方面,你可以自己设定起始坐标。比如从左边距 50 开始写内容:

pdf.SetX(50)

或者设置当前行的 Y 坐标:

pdf.SetY(150)

也可以封装一个函数,自动计算下一行的位置。


基本上就这些。go-pdf 功能不算特别强大,但胜在简单易用,适合做数据导出类的 PDF 生成任务。如果需要更复杂的布局,可能要考虑其他库或工具链,比如 wkhtmltopdf 结合 HTML 渲染。

相关专题

更多
golang如何定义变量
golang如何定义变量

golang定义变量的方法:1、声明变量并赋予初始值“var age int =值”;2、声明变量但不赋初始值“var age int”;3、使用短变量声明“age :=值”等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

173

2024.02.23

golang有哪些数据转换方法
golang有哪些数据转换方法

golang数据转换方法:1、类型转换操作符;2、类型断言;3、字符串和数字之间的转换;4、JSON序列化和反序列化;5、使用标准库进行数据转换;6、使用第三方库进行数据转换;7、自定义数据转换函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

224

2024.02.23

golang常用库有哪些
golang常用库有哪些

golang常用库有:1、标准库;2、字符串处理库;3、网络库;4、加密库;5、压缩库;6、xml和json解析库;7、日期和时间库;8、数据库操作库;9、文件操作库;10、图像处理库。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

334

2024.02.23

golang和python的区别是什么
golang和python的区别是什么

golang和python的区别是:1、golang是一种编译型语言,而python是一种解释型语言;2、golang天生支持并发编程,而python对并发与并行的支持相对较弱等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

205

2024.03.05

golang是免费的吗
golang是免费的吗

golang是免费的。golang是google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的开源编程语言,采用bsd开源协议。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

387

2024.05.21

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

193

2025.06.09

golang相关判断方法
golang相关判断方法

本专题整合了golang相关判断方法,想了解更详细的相关内容,请阅读下面的文章。

184

2025.06.10

golang数组使用方法
golang数组使用方法

本专题整合了golang数组用法,想了解更多的相关内容,请阅读专题下面的文章。

191

2025.06.17

虚拟号码教程汇总
虚拟号码教程汇总

本专题整合了虚拟号码接收验证码相关教程,阅读下面的文章了解更多详细操作。

25

2025.12.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 2.2万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.5万人学习

Git中文开发手册
Git中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号