当前位置: 首页 > news >正文

Go语言实现HTML转PDF

很多时候我们需要在后台动态生成图片,pdf来供页面显示,但是使用Go语言写样式是一件很棘手的事情,但是对于html来说却是很轻松,那么又没有什么方法可以将html直接转化为pdf呢?

go-wkhtmltopdf

go-wkhtmltopdf

在这里插入图片描述
在这里插入图片描述

go语言提供了go-wkhtmltopdf框架可以将htmlpdf

在转换的过程中需要先构建html,这里要使用html/template 库,首先将变量赋值到html中生成完整的html包括内容。

如下html页面:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>{{.ProjectName}}</title><style>body {font-family: "Microsoft YaHei", sans-serif;margin: 30px;position: relative;}h2 {text-align: center;margin-bottom: 30px;}.info-container {margin-bottom: 40px;position: relative;}.info-item {margin: 10px 0;font-size: 16px;}.label {display: inline-block;width: 120px;font-weight: bold;}.tag {display: inline-block;background-color: #007bff;color: white;padding: 3px 10px;border-radius: 4px;font-size: 14px;}.vehicle-group {margin: 20px 0 30px 0;padding-left: 10px;border-left: 3px solid #eee;}.vehicle-title {font-weight: bold;margin-bottom: 10px;font-size: 15px;}.vehicle-list {display: flex;flex-wrap: wrap;gap: 10px;}.vehicle-item {background-color: #f1f3f5;padding: 6px 12px;border-radius: 4px;}.qr-code-container {position: absolute;top: 5px;right: 70px;text-align: center;}.qr-code {width: 200px;height: 200px;}.qr-code-desc {margin-top: 8px;font-size: 14px;color: #666;}</style>
</head>
<body><h2>{{.ProjectName}}</h2><div class="info-container"><div class="info-item"><span class="label">清运单号:</span>{{.OrderNumber}}</div><div class="info-item"><span class="label">有效期限:</span>{{.ValidPeriod}}</div><div class="info-item"><span class="label">项目位置:</span>{{.ProjectLocation}}</div><div class="info-item"><span class="label">报备人姓名:</span>{{.ReporterName}}</div><div class="info-item"><span class="label">报备人手机号:</span>{{.ReporterPhone}}</div><div class="info-item"><span class="label">垃圾类型:</span><span class="tag">{{.GarbageType}}</span></div><div class="info-item"><span class="label">垃圾报备:</span>{{.GarbageReport}}</div><div class="info-item"><span class="label">处置场所:</span>{{.DisposalSite}}</div><!-- 二维码区域 --><div class="qr-code-container"><img src="{{.QrCodeUrl}}" alt="项目二维码" class="qr-code"><div class="qr-code-desc">{{.QrCodeDesc}}</div></div>
</div><!-- 使用循环展示运输企业和车辆信息 -->
{{range .TransportEnterprises}}
<div class="vehicle-group"><div class="vehicle-title">运输企业:{{.Name}}</div><div class="vehicle-title">运输车辆:</div><div class="vehicle-list">{{range .Vehicles}}<div class="vehicle-item">{{.}}</div>{{end}}</div>
</div>
{{end}}
</body>
</html>

go语言赋值参数:

package mainimport ("fmt""github.com/chack1919/go-wkhtmltopdf""html/template""os""strings""time"
)// 定义运输企业结构体
type TransportEnterprise struct {Name     string   // 企业名称Vehicles []string // 车辆列表
}// 定义模板所需的数据结构
type TemplateData struct {ProjectName          string                // 项目名称OrderNumber          string                // 清运单号ValidPeriod          string                // 有效期限ProjectLocation      string                // 项目位置ReporterName         string                // 报备人姓名ReporterPhone        string                // 报备人手机号GarbageType          string                // 垃圾类型GarbageReport        string                // 垃圾报备DisposalSite         string                // 处置场所TransportEnterprises []TransportEnterprise // 运输企业列表(结构体数组)QrCodeUrl            string                // 二维码图片URLQrCodeDesc           string                // 二维码描述
}func main() {// 3. 准备测试数据testData := TemplateData{ProjectName:     "三亚市海棠区创业人才保障项目",OrderNumber:     "NO.20250630SYS0002",ValidPeriod:     fmt.Sprintf("%s 至 %s", time.Now().Format("2006-01-02"), time.Now().AddDate(0, 1, 0).Format("2006-01-02")),ProjectLocation: "海口市龙华区白龙南路99号",ReporterName:    "王莹莹",ReporterPhone:   "15008976944",GarbageType:     "拆除垃圾",GarbageReport:   "240 吨",DisposalSite:    "海棠湾消纳场",TransportEnterprises: []TransportEnterprise{{Name: "海南省路和实业有限公司",Vehicles: []string{"琼AA1838","琼AA1839","琼AA1840",},},{Name: "海南顺通运输有限公司",Vehicles: []string{"琼BB2956","琼BB2957",},},},QrCodeUrl:  "https://picsum.photos/120/120",QrCodeDesc: "扫码查看详情",}temp, err := template.ParseFiles("test.html")if err != nil {panic(err)}file, err := os.Create("output.html")if err != nil {panic(err)}defer func() {err = file.Close()if err != nil {return}}()err = temp.Execute(file, testData)if err != nil {panic(err)}generator, err := wkhtmltopdf.NewPDFGenerator()if err != nil {panic(err)}readFile, err := os.ReadFile("./output.html")if err != nil {panic(err)}generator.AddPage(wkhtmltopdf.NewPageReader(strings.NewReader(string(readFile))))err = generator.Create()if err != nil {fmt.Println("Error creating PDF:", err)}create, err := os.Create("test.pdf")if err != nil {panic(err)}_, err = create.Write(generator.Bytes())
}

最终效果:

在这里插入图片描述

http://www.dtcms.com/a/470865.html

相关文章:

  • 深入解析Java NIO:从BIO到Reactor模式的网络编程演进
  • 公司怎么做网站推广北京西站停车场收费标准
  • 企业网站系统手机版住房与城乡建设部建设环境工程技术中心网站
  • 非法期货做网站安康信息平台
  • MySQL安装包下载成功,如何跨版本备份迁移无忧?
  • ASM架构基础与核心概念
  • 每天五分钟深度学习:正则化技术解决过拟合(高方差)问题
  • 局域网建设个人网站美食网站设计论文
  • 使用 systemd 管理 MySQL 服务
  • 做网站客户最关心哪些问题下载百度电商平台app
  • 消防电器具工程量-图形识别快速计算
  • 印度股票市场数据接口,支持实时行情、IPO新股、公司信息、技术分析等多种功能
  • 顺德 网站开发 招聘工程平台网
  • 网站建设开发网站案例项目费用插画原画十大培训机构
  • 排查素材下载过慢或失败问题
  • 小网站托管费用大连网站建设 仟亿
  • 基于单片机的窗帘、灯光、空调智能家居控制系统设计
  • Docker存储体系深度解析
  • 如何基于OneAPI构建langchain RAG系统
  • 网站建设说明书模板wordpress菜单结构
  • 如何应对紧急投标?AI工具1小时完成400页标书
  • 百度网盘PC电脑端提速方法
  • 【触想智能】什么是工业平板电脑以及工业平板电脑对制造业具有什么意义
  • 郑州 网站建设p9制作公司
  • 深度解析 “应用程序无法正常启动 0xc000007b”:原因、解决方案与预防措施
  • 南宁智慧园区网站建设wordpress如何更改页面链接
  • PowerBI实战-跨页面钻取drill through
  • 怎样做网站标题优化百度网站开发
  • 前后端解耦架构的演进:从REST到GraphQL与gRPC的范式迁移
  • 9.4 归并排序(排序(上))