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

文章精选推荐

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 来安装它:

go get -u github.com/jung-kurt/gofpdf

2. 使用 gofpdf 生成 PDF

gofpdf 提供了一个简单的 API 来生成 PDF 文件。你可以定义页面的尺寸、字体、颜色、边距等,还可以插入文本、图片、表格等内容。

2.1 创建一个基本的 PDF 示例

package mainimport ("github.com/jung-kurt/gofpdf""os"
)func main() {// 创建一个新的 PDF 对象pdf := gofpdf.New("P", "mm", "A4", "") // P: 纵向,mm: 毫米单位,A4: 页面大小// 添加一页pdf.AddPage()// 设置字体pdf.SetFont("Arial", "B", 16)// 写入标题pdf.Cell(40, 10, "Hello, Go PDF!")// 输出到文件err := pdf.OutputFileAndClose("output.pdf")if err != nil {panic(err)}
}

2.2 设置字体和样式

你可以设置不同的字体、大小、颜色等。

package mainimport ("github.com/jung-kurt/gofpdf""os"
)func main() {pdf := gofpdf.New("P", "mm", "A4", "")// 添加一页pdf.AddPage()// 设置字体为 Arial,常规样式,大小为 14pdf.SetFont("Arial", "", 14)// 设置字体颜色为蓝色pdf.SetTextColor(0, 0, 255)// 写入文本pdf.Cell(40, 10, "This is a blue text.")// 设置字体为 Times New Roman,粗体,大小为 12pdf.SetFont("Times", "B", 12)pdf.SetTextColor(255, 0, 0) // 红色pdf.Ln(10)pdf.Cell(40, 10, "This is a red bold Times font text.")// 输出 PDF 到文件err := pdf.OutputFileAndClose("styled_output.pdf")if err != nil {panic(err)}
}

2.3 添加图片

你还可以在 PDF 中插入图片。gofpdf 支持 JPEG、PNG 和 GIF 格式的图片。

package mainimport ("github.com/jung-kurt/gofpdf"
)func main() {pdf := gofpdf.New("P", "mm", "A4", "")// 添加一页pdf.AddPage()// 插入图片// 参数: 图片文件路径, x 坐标, y 坐标, 宽度, 高度pdf.Image("example.jpg", 10, 10, 50, 50)// 输出到文件err := pdf.OutputFileAndClose("image_output.pdf")if err != nil {panic(err)}
}

2.4 表格和复杂布局

gofpdf 也支持创建表格,以下是一个简单的表格生成示例:

package mainimport ("github.com/jung-kurt/gofpdf"
)func createTable(pdf *gofpdf.Fpdf) {// 设置字体pdf.SetFont("Arial", "B", 12)// 表头headers := []string{"ID", "Name", "Age"}for _, header := range headers {pdf.Cell(40, 10, header)}pdf.Ln(10) // 换行// 表格内容data := [][]string{{"1", "Alice", "23"},{"2", "Bob", "30"},{"3", "Charlie", "25"},}for _, row := range data {for _, cell := range row {pdf.Cell(40, 10, cell)}pdf.Ln(10) // 换行}
}func main() {// 创建 PDF 对象pdf := gofpdf.New("P", "mm", "A4", "")// 添加一页pdf.AddPage()// 创建表格createTable(pdf)// 输出到文件err := pdf.OutputFileAndClose("table_output.pdf")if err != nil {panic(err)}
}

2.5 添加页脚和页码

在多页文档中,你可能希望添加页脚或页码。可以通过自定义函数来实现这一点。

package mainimport ("github.com/jung-kurt/gofpdf"
)func addFooter(pdf *gofpdf.Fpdf) {// 设置字体pdf.SetFont("Arial", "I", 8)// 设置位置pdf.SetY(-15) // 距离页面底部 15mm// 页脚内容pdf.Cell(0, 10, "Page "+strconv.Itoa(pdf.PageNo()), 0, 0, "C")
}func main() {pdf := gofpdf.New("P", "mm", "A4", "")// 添加一页pdf.AddPage()// 设置正文内容pdf.SetFont("Arial", "", 12)pdf.Cell(40, 10, "This is a PDF with a footer!")// 添加页脚addFooter(pdf)// 输出 PDFerr := pdf.OutputFileAndClose("footer_output.pdf")if err != nil {panic(err)}
}

2.6 更多样式和布局

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

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

2.7 中文支持

Go 的 gofpdf 库原生不支持中文字符,但你可以通过加载 TTF 字体文件来支持中文字符。

首先,确保你有一个支持中文的 TTF 字体文件(例如,SimHei.ttf)。

package mainimport ("github.com/jung-kurt/gofpdf""log"
)func main() {// 创建一个新的 PDF 对象pdf := gofpdf.New("P", "mm", "A4", "")// 添加页面pdf.AddPage()// 添加中文字体err := pdf.AddTTFFont("simhei", "./SimHei.ttf")if err != nil {log.Fatal(err)}// 设置字体pdf.SetFont("simhei", "", 14)// 写入中文内容pdf.Cell(40, 10, "你好,Go PDF!")// 输出到文件err = pdf.OutputFileAndClose("chinese_output.pdf")if err != nil {log.Fatal(err)}
}

3. 总结

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

  • 基础样式:字体、颜色、文本对齐、图片插入。
  • 复杂布局:表格、页脚、页码等。
  • 高级功能:中文支持、矢量图形等。

gofpdf 是一个功能强大的库,能够满足大部分 PDF 生成需求,同时也具有极好的扩展性,可以满足各种业务场景的需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/67569.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenVela——专为AIoT领域打造的开源操作系统

目录 一、系统背景与开源 1.1. 起源 1.2. 开源 二、系统特点 2.1. 轻量化 2.2. 标准兼容性 2.3. 安全性 2.4. 高度可扩展性 三、技术支持与功能 3.1. 架构支持 3.2. 异构计算支持 3.3. 全面的连接套件 3.4. 开发者工具 四、应用场景与优势 4.1. 应用场景 4.2. …

хорошо哈拉少wordpress俄语主题

хорошо哈拉少wordpress俄语主题 wordpress俄文网站模板,推荐做俄罗斯市场的外贸公司建俄语独立站使用。 演示 https://www.jianzhanpress.com/?p7360

TOSUN同星TsMaster使用入门——3、使用系统变量及c小程序结合panel面板发送报文

本篇内容将介绍TsMaster中常用的Panel面板控件以及使用Panel控件通过系统变量以及c小程序来修改信号的值,控制报文的发送等。 目录 一、常用的Panel控件介绍 1.1系统——启动停止按钮 1.2 显示控件——文本框 1.3 显示控件——分组框 1.4 读写控件——按钮 1.…

Learning Prompt

说明:这是我的学习笔记,很多内容转自网络,请查阅文章末尾的参考资料。 目录 基本要求(C.R.E.A.T.E)总结文章(Summarise)改写文章(Rewrite)根据参考资料回答问题(Question & Answer)参考资料 基本要求(C.R.E.A.T.E) Character This is th…

程序设计:排版、检验报告的上下标解决几种办法

【啰嗦两句】 本文重点在于提供几个针对排版文档、各种检验报告系统等程序设计时,遇到的上下标录入、绘制展示等问题的应对办法,但是准确地说,并没有非常优秀的方案。 【上下标难题】 一般的行业或许对上下标并没有严格要求,多数…

python mysql库的三个库mysqlclient mysql-connector-python pymysql如何选择,他们之间的区别

三者的区别 1. mysqlclient 特点: 是一个用于Python的MySQL数据库驱动程序,用于与MySQL数据库进行交互。 依赖于MySQL的本地库,因此在安装时需要确保系统上已安装了必要的依赖项,如libmysqlclient-dev等。 性能较好&#xff0c…

绘图专用,26个常见流程图符号及其解释

关注作者 当您设计网站、构建应用程序或绘制业务系统时,您需要一种方法来清晰地绘制步骤和用户流程。虽然您可以使用流程图来概述这些过程,但箭头和方框只能帮助您到目前为止。为了清楚地表达您的意思,您需要流程图符号。 为了帮助解释每个流…

【STM32-学习笔记-11-】RTC实时时钟

文章目录 RTC实时时钟一、RTC简介二、RTC框图三、RTC基本结构四、RTC操作注意事项五、RTC函数六、配置RTCMyRTC.c 七、示例:实时时钟①、main.c②、MyRTC.c③、MyRTC.h RTC实时时钟 一、RTC简介 RTC(Real Time Clock)实时时钟 RTC是一个独立…

STL—stack与queue

目录 Stack stack的使用 stack的模拟实现 queue queue的使用 queue的模拟实现 priority_queue priority_queue的用法 priority_queue的模拟实现 容器适配器 种类 Stack http://www.cplusplus.com/reference/stack/stack/?kwstack stack是栈,后入先出 stack的…

【redis】redis-cli命令行工具的使用

redis-cli命令行工具是一个功能强大的Redis客户端&#xff0c;它允许用户与Redis数据库进行交互和管理。 以下是一些常用参数的使用说明&#xff1a; 基本连接参数 -h, --host <hostname>&#xff1a;指定要连接的Redis服务器的主机名或IP地址。如果未指定&#xff0c;…

wordpress的火车头商品发布接口

<?php require ../wp-load.php; ini_set(memory_limit, 1024M); set_time_limit(180);$top_cat ; # 图片链接域名替换 $image_host ;$start_time microtime(true);$counter 0; // 临时缓存 $products $skus $categories []; $var_sku_index 1;$rowData$_POST;// if…

GaussDB日常维护操作

GaussDB日常维护操作 日常维护检查操作系统参数数据库健康状态日志收集日志清理应用连接数表的例行维护索引重建慢SQL诊断 日常维护检查 实例状态检查&#xff1a; #检查集群实例状态 gs_check -U omm -i CheckClusterStatecm_ctl query -Cvipd#检查主备DN的角色和同步状态 g…

Asp .Net Core 实现微服务:集成 Ocelot+Nacos+Swagger+Cors实现网关、服务注册、服务发现

什么是 Ocelot ? Ocelot是一个开源的ASP.NET Core微服务网关&#xff0c;它提供了API网关所需的所有功能&#xff0c;如路由、认证、限流、监控等。 Ocelot是一个简单、灵活且功能强大的API网关&#xff0c;它可以与现有的服务集成&#xff0c;并帮助您保护、监控和扩展您的…

性价比1.2V电压基准替代

前言&#xff1a; 小于2V的电压基准比较少&#xff0c;且价格稍贵&#xff0c;对于要求不高的场合&#xff0c;1117可以替代使用&#xff0c;温度系数低于 100ppm/C, 价格便宜。 1117是线性稳压器的一种&#xff0c;一般情况下&#xff0c;输出电压可调。 如下述的1117&#xf…

使用 Java 和 FreeMarker 实现自动生成供货清单,动态生成 Word 文档,简化文档处理流程。

在上一篇博客中主要是使用SpringBootApache POI实现了BOM物料清单Excel表格导出&#xff0c;详见以下博客&#xff1a; Spring Boot Apache POI 实现 Exc&#xff08;&#xff09;el 导出&#xff1a;BOM物料清单生成器&#xff08;支持中文文件名、样式美化、数据合并&#…

探索与创作:2024年CSDN平台上的成长与突破

文章目录 我与CSDN的初次邂逅初学阶段的阅读CSDN&#xff1a;编程新手的避风港初学者的福音&#xff1a;细致入微的知识讲解考试复习神器&#xff1a;技术总结的“救命指南”曾经的自己&#xff1a;为何迟迟不迈出写博客的第一步兴趣萌芽&#xff1a;从“读”到“想写”的初体验…

鸿蒙(HarmonyOS)的开发

在当今数字化时代&#xff0c;软件开发不仅需要技术上的创新和突破&#xff0c;同时也必须严格遵守法律法规。作为中国自主研发的操作系统&#xff0c;鸿蒙&#xff08;HarmonyOS&#xff09;的开发者们更应该注重这一点。本文将围绕“鸿蒙开发需遵守法律法规”这一主题&#x…

SSM课设-学生管理系统

【课设者】SSM课设-学生管理系统 技术栈: 后端: SpringSpringMVCMybatisMySQLJSP 前端: HtmlCssJavaScriptEasyUIAjax 功能: 学生端: 登陆 学生信息管理 个人信息管理 老师端: 多了教师信息管理 管理员端: 多了班级信息管理 多了年级信息管理 多了系统用户管理

力扣 打家劫舍

动态规划&#xff0c;当前状态由前两个状态获得&#xff0c;滚动数组。 题目 从题可以看出要达到最高金额时&#xff0c;要从相邻的房屋拿。因此是当前房屋的金额隔一个做累加&#xff0c;当然还需要跟前一个相邻的房屋做比较&#xff0c;便于取到哪边金额更高&#xff0c;因此…

用公网服务器实现内网穿透

首先需要一个公网服务器 下载frp 搜索github下载到frp&#xff0c;服务端frps/客户端frpc。。下载的时候要注意自己本地内网机的cpu版本和服务端cpu架构 我的电脑是mac M1PRO版本 下载的是&#xff1a;darwinarm64 比如 服务端一般是Linux&#xff08;Intel 64位CPU&#xf…