You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 21:02:29