使用 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 生成需求,同时也具有极好的扩展性,可以满足各种业务场景的需求。
相关文章:
使用 Go 语言生成样式美观的 PDF 文件
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
鸿蒙-点击Notification通知并打开App的具体页面
意图通知 获取router事件中传递参数并跳转 目前点击通知消息打开应用的指定页面,通过为通知添加行为意图的方式。也就是在wants的parameters中设置自定义参数,然后在UIAbility的onNewWant或者onCreate方法中 解析配置的自定义参数信息判断跳转不同页面&a…...
非科班转码第5年零241天
文章目录 非科班转码第5年零241天第一份工作鸭梨山大同事的帮助第二份工作新公司学到很多出海计划 非科班转码第5年零241天 第一份工作 2019年5月24日,我从机械工程转码后找到第一份工作——图像算法工程师,能得到这份工作纯属偶然,当时公司…...
数据库:MongoDB命令行帮助解释
MongoDB命令: mongodmongosmongoperrormongoexportmongofilesmongoimportmongorestoreMongostat MongoDB包中的核心组件包括: mongod 是 MongoDB 的核心服务器进程,负责数据存储和管理。mongos 是分片集群的路由进程,负责将请求路由到正确…...
MongoDB单机版安装
MongoDB单机版安装 在CentOS Linux release 7.9.2009 (Core)下安装MongoDB的步骤如下: 1 创建用户和组(可选,根据需要) 如果您希望以非root用户运行MongoDB服务,可以创建一个专用的用户和组。 groupadd mongodb us…...
Azure面试
文章目录 项目地址一、Azure Storage1. What are the benefits of Azure Storage? 二、汇总 项目地址 教程作者:教程地址: 代码仓库地址: 所用到的框架和插件: dbt airflow一、Azure Storage 1. What are the bene…...
在.NET用C#将Word文档转换为HTML格式
将Word文档转换为HTML格式尤其具有显著的优势,它不仅能够确保文档内容在多种设备和平台上保持一致灵活的显示,还便于通过网络进行传播和集成到各种Web应用中。随着越来越多的企业和开发者寻求更灵活、更具兼容性的文件处理方式,.NET框架下的C…...
macOS 安装JDK17
文章目录 前言介绍新特性下载安装1.下载完成后打开downloads 双击进行安装2.配置环境变量3.测试快速切换JDK 小结 前言 近期找开源软件,发现很多都已经使用JDK17springboot3 了,之前的JDK8已经被替换下场,所以今天就在本机安装了JDK17&#…...
Django SimpleUI 自定义功能实战
1. 引言 Django SimpleUI 是一个基于 Django 的后台管理界面美化工具,旨在帮助开发者快速构建现代化的后台管理系统。除了默认的功能外,SimpleUI 还支持高度自定义,开发者可以根据需求添加各种实用功能。本文将详细介绍如何在 Django SimpleUI 中实现自定义功能,包括数据同…...
C语言/C++自然序列重排列——相邻序号不相邻问题⭐
同类题目:C语言自然序列重排——相邻元素的差值集合恰好有 k 个不同的值。⭐⭐-CSDN博客 题目描述(难度⭐) 一场针对 n 学生的考试将在一个又长又窄的房间里举行,因此学生们将按某种顺序排成一行。老师怀疑相邻编号的学生…...
Spring boot面试题---- Spring boot项目运行原理
1.启动流程概述 Spring Boot 的启动是从一个带有main方法的主类开始的。这个主类通常会有一个@SpringBootApplication注解。这个注解是一个组合注解,它包含了@Configuration、@EnableAutoConfiguration和@ComponentScan。@Configuration注解表明这个类是一个配置类,它可以定义…...
Qt/C++ 基于 QGraphicsView 的绘图软件 (附源码下载链接)
基于 Qt 的 QGraphicsView 绘图软件项目进行深入讲解,分析其核心代码与功能实现,帮助开发者理解 QGraphicsView 的用法。 项目概览 该项目实现了一个简单的绘图应用,用户可以在界面中创建和编辑矩形、椭圆、直线、多边形和文本等图形对象。功…...
如何使用 useMemo 和 memo 优化 React 应用性能?
使用 useMemo 和 memo 优化 React 应用性能 在构建复杂的 React 应用时,性能优化是确保应用流畅运行的关键。React 提供了多种工具来帮助开发者优化组件的渲染和计算逻辑,其中 useMemo 和 memo 是两个非常有用的 Hook。本文将详细介绍这两个工具的使用方…...
数据结构(链表 哈希表)
在Python中,链表和哈希表都是常见的数据结构,可以用来存储和处理数据。 链表是一种线性数据结构,由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。链表可以用来实现栈、队列以及其他数据结构。Python中可…...
人工智能之深度学习_[4]-神经网络入门
神经网络基础 1 神经网络 深度学习神经网络就是大脑仿生,数据从输入到输出经过一层一层的神经元产生预测值的过程就是前向传播(也叫正向传播)。 前向传播涉及到人工神经元是如何工作的(也就是神经元的初始化、激活函数…...
STM32之CubeMX图形化工具开发介绍(十七)
STM32F407 系列文章 - STM32CubeMX(十七) 目录 前言 一、CubeMX 二、下载安装 1.下载 2.安装 3.图解步骤 三、用户界面 1.项目配置 2.项目生成 3.项目文件解释 4.新建工程 5.查看原工程 四、FAQ 总结 前言 STMCube源自意法半导体…...
css3过渡总结
一、过渡的定义与作用 CSS3 过渡(Transitions)允许 CSS 属性在一定的时间区间内平滑地过渡,从一个值转变为另一个值。它能够让网页元素的状态变化更加自然、流畅,给用户带来更好的视觉体验。例如,当一个元素从隐藏状态…...
latin1_swedish_ci(latin1 不支持存储中文、日文、韩文等多字节字符)
文章目录 1、SHOW TABLE STATUS WHERE Name batch_version;2、latin1_swedish_ci使用场景注意事项修改字符集和排序规则修改表的字符集和排序规则修改列的字符集和排序规则修改数据库的默认字符集和排序规则 3、ALTER TABLE batch_version CONVERT TO CHARACTER SET utf8mb4 C…...
C语言编程笔记:文件处理的艺术
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一、为什么要用文件二、文件的分…...
[创业之路-255]:《华为数字化转型之道》-1-主要章节、核心内容、核心思想
目录 前言:数字化转型对于企业而言,是一种全方位的变革 一、主要章节 1、认知篇(第1~2章)- Why 2、方法篇(第3~5章)- How 3、实践篇(第6~10章)- 实践 4、平台篇(第…...
《汽车维修技师》是什么级别的期刊?是正规期刊吗?能评职称吗?
问题解答: 问:《汽车维修技师》是不是核心期刊? 答:不是,是知网收录的正规学术期刊。 问:《汽车维修技师》级别? 答:省级。主管单位:北方联合出版传媒(…...
2024 京东零售技术年度总结
每一次回望,都为了更好地前行。 2024 年,京东零售技术在全面助力业务发展的同时,在大模型应用、智能供应链、端技术、XR 体验等多个方向深入探索。京东 APP 完成阶段性重要改版,打造“又好又便宜”的优质体验;国补专区…...
PyTorch使用教程(8)-一文了解torchvision
一、什么是torchvision torchvision提供了丰富的功能,主要包括数据集、模型、转换工具和实用方法四大模块。数据集模块内置了多种广泛使用的图像和视频数据集,如ImageNet、CIFAR-10、MNIST等,方便开发者进行训练和评估。模型模块封装了大量经…...
如何在不暴露MinIO地址的情况下,用Spring Boot与KKFileView实现文件预览
在现代Web应用中,文件预览是一项常见且重要的功能。它允许用户在不上传或下载文件的情况下,直接在浏览器中查看文件内容。然而,直接将文件存储服务(如MinIO)暴露给前端可能会带来安全风险。本文将介绍如何在不暴露MinI…...
ICMP协议和ICMP重定向攻击
✍作者:柒烨带你飞 💪格言:生活的情况越艰难,我越感到自己更坚强;我这个人走得很慢,但我从不后退。 📜系列专栏:网络安全从菜鸟到飞鸟的逆袭 目录 一,ICMP基本概念二&…...
leetcode203-移除链表元素
leetcode203 什么是链表 之前不懂链表的数据结构,一看到链表的题目就看不明白 链表是通过next指针来将每个节点连接起来的,题目中给的链表是单向链表,有两个值,一个val表示值,一个next:表示连接的下一个…...
Rust 中构建 RESTful API
在 Rust 中构建 RESTful API,你可以选择几个不同的框架。每个框架有不同的特点、优缺点和适用场景,下面我将介绍几个常用的 Rust Web 框架,并分析它们的优缺点。 Actix Web 简介: Actix Web 是一个非常高性能的 Web 框架…...
Sqlmap入门
原理 在owasp发布的top10 漏洞里面,注入漏洞一直是危害排名第一,其中数据库注入漏洞是危害的。 当攻击者发送的sql语句被sql解释器执行,通过执行这些恶意语句欺骗数据库执行,导致数据库信息泄漏 分类 按注入类型 常见的sql注入…...
迈向 “全能管家” 之路:机器人距离终极蜕变还需几步?
【图片来源于网络,侵删】 这是2024年初Figure公司展示的人形机器人Figure 01,他可以通过观看人类的示范视频,在10小时内经过训练学会煮咖啡,并且这个过程是完全自主没有人为干涉的! 【图片来源于网络,侵删】…...
移动端 REM 适配
移动端 REM 适配 Vant 中的样式默认使用 px 作为单位,如果需要使用 rem 单位,推荐使用以下两个工具: postcss-pxtorem 是一款 postcss 插件,用于将单位转化为 remlib-flexible 用于设置 rem 基准值 下面我们分别将这两个工具配…...
哈尔滨网站备案手续费/北京seo优化技术
说明:Ajax是无法实现文件传输的,本文只是模拟了Ajax不刷新页面就可以请求并返回数据的效果。实质上还是通过提交form表单来返回文件流的输出。分步实现逻辑:ajax请求服务器,访问数据库,根据查询到的数据生成一个数据文…...
武汉做网站找哪家好/营业推广
前端时间用 animation 实现 H5 页面中首页动画过渡,很简单的一个效果,首页加载一个客服头像,先放大,停留 700ms 后再缩小至顶部。代码如下 <!DOCTYPE html> <html> <head lang"zh-cn"><meta char…...
wordpress和discuz共存/深企在线
区别解释 su是申请切换root用户,需要申请root用户密码。有些Linux发行版,例如ubuntu,默认没有设置root用户的密码,所以需要我们先使用sudo passwd root设置root用户密码。 而sudo su是当前用户暂时申请root权限,所以…...
北京单页营销型网站/品牌运营推广方案
我正在用PHP编写一个基本的莫尔斯代码转换器,它可以接受一个字符串并将其转换为莫尔斯代码.它使用了一个关联数组,一个foreach循环和一个for循环.它有效,除了某些原因它在每个转换后的字符后输出等效于’0’的莫尔斯码.我无法弄清楚0的来源.如果我从关联数组中删除0,没有问题,但…...
中国建设人才服务信息网是正规网站/seo专业培训中心
蜻蜓特派员Windows XP SP3 纯净安装版 终结版,系统纯净无广告、无插件,网卡等驱动和运行库齐全,安全更新补丁全网最新!微软停止了 Windows XP 的支持之后还是偶尔为 WinXP 提供了更加安全的使用环境。看到网上上很多“最终版”&am…...
深圳手机网站公司/推广是什么意思
// 前导0 function padLeftZero(str) {return (00${str}).substring(str.length) }/*** 日期格式化为本地日期* param {str} time 时间戳* param {str} fmt 格式* return {str} 格式后日期*/ export const formatDate (time, fmt) > {const date new Date(time);const yea…...