在Go语言中使用wkhtmltopdf向PDF页脚传递动态数据
给go-wkhtmltopdf的PDF页脚传递动态数据
go-wkhtmltopdf本身不会解析Go模板文件,要给页脚传递动态数据,得先通过Go的html/template把模板渲染成带数据的HTML字符串,再传给页脚配置,具体步骤如下:
1. 定义页脚数据结构
先定义一个结构体来承载需要传递给页脚的动态数据:
type FooterData struct { DocumentTitle string CompanyName string }
2. 修改代码实现动态渲染
替换你原来的页脚设置逻辑,先渲染模板再传入:
"bytes" "encoding/base64" "fmt" htmlTemplate "html/template" "path" "strings" textTemplate "text/template" wkhtml "github.com/SebastiaanKlippert/go-wkhtmltopdf" // 加载footer模板文件 footerTmpl, err := htmlTemplate.ParseFiles("templates/footer.html") if err != nil { return nil, err } // 准备动态数据 footerData := FooterData{ DocumentTitle: "月度报告", CompanyName: "XX科技", } // 渲染模板到缓冲区 var footerContent bytes.Buffer if err := footerTmpl.Execute(&footerContent, footerData); err != nil { return nil, err } // 初始化PDF生成器 pdfg, err := wkhtml.NewPDFGenerator() if err != nil { return nil, err } page := wkhtml.NewPageReader(strings.NewReader(util.FilterSmartQuotesEtc(html))) // 设置渲染后的页脚HTML内容,而非模板文件路径 page.FooterHTML.Set(footerContent.String()) pdfg.AddPage(page) err = pdfg.Create() if err != nil { return nil, err }
3. 编写footer.html模板
在模板里用Go模板语法接收动态数据,同时还能使用wkhtmltopdf内置的页码变量:
<div style="font-size: 10px; padding: 10px; text-align: center; border-top: 1px solid #ccc;"> <p>{{.DocumentTitle}}</p> <p>© {{.CompanyName}} | 第<span class="pageNumber"></span>页 / 共<span class="totalPages"></span>页</p> </div>
{{.DocumentTitle}}、{{.CompanyName}}:由Go渲染时传入的FooterData填充pageNumber、totalPages:wkhtmltopdf内置变量,会自动替换为实际页码和总页数
内容的提问来源于stack exchange,提问作者girish
相关产品推荐
相关产品推荐

