使用 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 main

import (
	"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 main

import (
	"github.com/jung-kurt/gofpdf"
	"os"
)

func main() {
	pdf := gofpdf.New("P", "mm", "A4", "")

	// 添加一页
	pdf.AddPage()

	// 设置字体为 Arial,常规样式,大小为 14
	pdf.SetFont("Arial", "", 14)

	// 设置字体颜色为蓝色
	pdf.SetTextColor(0, 0, 255)

	// 写入文本
	pdf.Cell(40, 10, "This is a blue text.")

	// 设置字体为 Times New Roman,粗体,大小为 12
	pdf.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 main

import (
	"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 main

import (
	"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 main

import (
	"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)

	// 输出 PDF
	err := pdf.OutputFileAndClose("footer_output.pdf")
	if err != nil {
		panic(err)
	}
}

2.6 更多样式和布局

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

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

2.7 中文支持

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

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

package main

import (
	"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 生成需求,同时也具有极好的扩展性,可以满足各种业务场景的需求。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【STM32-学习笔记-10-】BKP备份寄存器+时间戳

文章目录 BKP备份寄存器Ⅰ、BKP简介1. BKP的基本功能2. BKP的存储容量3. BKP的访问和操作4. BKP的应用场景5. BKP的控制寄存器 Ⅱ、BKP基本结构Ⅲ、BKP函数Ⅳ、BKP使用示例 时间戳一、Unix时间戳二、时间戳的转换(time.h函数介绍)Ⅰ、time()Ⅱ、mktime()…

Flowable 管理各业务流程:流程设计器 (获取流程模型 XML)、流程部署、启动流程、流程审批

文章目录 引言I 表结构主要表前缀及其用途核心表II 流程设计器(Flowable BPMN模型编辑器插件)Flowable-UIvue插件III 流程部署部署步骤例子:根据流程模型ID部署IV 启动流程启动步骤ACT_RE_PROCDEF:流程定义相关信息例子:根据流程 ID 启动流程V 流程审批审批步骤Flowable 审…

java根据模板导出word,并在word中插入echarts相关统计图片以及表格

引入依赖创建word模板创建ftl模板文件保存的ftl可能会出现占位符分割的问题,需要处理将ftl文件中的图片的Base64删除,并使用占位符代替插入表格,并指定表格的位置在图片下方 Echarts转图片根据模板生成word文档DocUtil导出word文档 生成的wor…

晨辉面试抽签和评分管理系统之十:如何搭建自己的数据库服务器,使用本软件的网络版

晨辉面试抽签和评分管理系统(下载地址:www.chenhuisoft.cn)是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…

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

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

mongoose 支持https踩坑纪实

简述 mongoose是C编写的嵌入式web服务,它能够支持https协议,可以简单的部署,但要做到完美部署,不是那么容易。 部署方法 本人使用的是最新的7.16版,以前版本似乎是要通过修改 头文件中的 MG_ENABLE_SSL 宏定义&…

深入内核讲明白Android Binder【二】

深入内核讲明白Android Binder【二】 前言一、Binder通信内核源码整体思路概述1. 客户端向服务端发送数据流程概述1.1 binder_ref1.2 binder_node1.3 binder_proc1.4 binder_thread 2. 服务端的binder_node是什么时候被创建的呢?2.1 Binder驱动程序为服务创建binder…

玩转大语言模型——使用graphRAG+Ollama构建知识图谱

系列文章目录 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 玩转大语言模型——使用graphRAGOllama构建知识图谱 文章目录 系列文章目录前言下载和安装用下载项目的方式下载并安装用pip方式下载并安装 生成知…

微透镜阵列精准全检,白光干涉3D自动量测方案提效70%

广泛应用的微透镜阵列 微透镜是一种常见的微光学元件,通过设计微透镜,可对入射光进行扩散、光束整形、光线均分、光学聚焦、集成成像等调制,进而实现许多传统光学元器件难以实现的特殊功能。 微透镜阵列(Microlens Array&#x…

新星杯-ESP32智能硬件开发--ESP32系统

本博文内容导读📕🎉🔥 1、ESP32芯片和系统架构进行描述,给出ESP32系统的地址映射规则。 2、介绍ESP32复位及时钟定时具体功能,方便后续开发。 3、介绍基于ESP32开发板使用的底层操作系统,对ESP32应用程序开…

python编程-OpenCV(图像读写-图像处理-图像滤波-角点检测-边缘检测)图像变换

形态变换 图像处理中的形态学操作是处理图像结构的有效方法。以下是一些常见的形态学操作的介绍及其在 OpenCV 中的实现示例。 1. 腐蚀(Erosion) 腐蚀操作通过消除图像边界来减少图像中的白色区域(前景),使物体的边…

Linux 音视频入门到实战专栏(视频篇)视频编解码 MPP

文章目录 一、MPP 介绍二、获取和编译RKMPP库三、视频解码四、视频编码 沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍如何调用alsa api来进行音频数据的播放和录制。 一、MPP 介绍 瑞芯微提供的媒体处理软件平台…

阿里云通义实验室自然语言处理方向负责人黄非:通义灵码2.0,迈入 Agentic AI

通义灵码是基于阿里巴巴通义大模型研发的AI 智能编码助手,在通义灵码 1.0 时代,我们针对代码的生成、补全和问答,通过高效果、低时延,研发出了国内最受欢迎的编码助手。 在通义灵码 2.0 发布会上,阿里云通义实验室自然…

Linux网络_套接字_UDP网络_TCP网络

一.UDP网络 1.socket()创建套接字 #include<sys/socket.h> int socket(int domain, int type, int protocol);domain (地址族): AF_INET网络 AF_UNIX本地 AF_INET&#xff1a;IPv4 地址族&#xff0c;适用于 IPv4 协议。用于网络通信AF_INET6&#xff1a;IPv6 地址族&a…

endnote x9 如何将参考文献和文中的应用格式由annotated变为编码,例[1],[2]

在 EndNote X9 中&#xff0c;将参考文献和文中引用格式更改为编码形式&#xff08;如 [1], [2]&#xff09;需要以下步骤&#xff1a; 1. 选择合适的输出样式 打开 EndNote X9。点击菜单栏的 "Edit" > "Output Styles" > "Open Style Manage…

用户中心项目教程(二)---umi3的使用出现的错误

目录 1.情况的说明 2.遇到的问题 1&#xff09;第一个问题-关于npx的使用 2&#xff09;第二个问题--unsupport问题 3&#xff09;第三个收获--nodejs安装问题 4&#xff09;第四个收获---nvm下载问题 5&#xff09;第五个问题--尚未解决的问题 3.个人总结 1.情况的说明…

【面试宝典】Java中创建线程池的几种方式以及区别

强烈推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站:人工智能 创建线程池有多种方式&#xff0c;主要通过 Java 的 java.util.concurrent 包提供的 Executors 工具类来实现。以下是几…

Net Core微服务入门全纪录(三)——Consul-服务注册与发现(下)

系列文章目录 1、.Net Core微服务入门系列&#xff08;一&#xff09;——项目搭建 2、.Net Core微服务入门全纪录&#xff08;二&#xff09;——Consul-服务注册与发现&#xff08;上&#xff09; 3、.Net Core微服务入门全纪录&#xff08;三&#xff09;——Consul-服务注…

通过视觉语言模型蒸馏进行 3D 形状零件分割

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01;对应英文要求比较高&#xff0c;特此说明&#xff01; Abstract This paper proposes a cross-modal distillation framework, PartDistill, which transfers 2D knowledge from vision-language models …

强推未发表!3D图!Transformer-LSTM+NSGAII工艺参数优化、工程设计优化!

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Transformer-LSTMNSGAII多目标优化算法&#xff0c;工艺参数优化、工程设计优化&#xff01;&#xff08;Matlab完整源码和数据&#xff09; Transformer-LSTM模型的架构&#xff1a;输入层&#xff1a;多个变量作…