如何使用go-wkhtmltopdf设置带页码计数的动态页脚
Go后端生成带页码计数动态页脚的PDF问题
我用Go语言编写函数将HTML文件生成PDF,但无法生成包含页码计数的动态页脚。必须在后端通过Go/HTML实现,JavaScript方案不适用。
现有代码
HTML模板部分
{{define "Count"}}Invoice Footer{{end}} {{define "invoiceFooter"}} <table style="border-bottom: 1px solid black; width: 100%"> <tr> <td class="--footer-center"></td> <td style="text-align:center"> Page [page] of [topage] </td> </tr> </table> {{end}}
Go生成代码部分
func generatePDF(data *cs.FileData) (pdfgBytes []byte, err error) { var templ *template.Template _, err = os.Getwd() if err != nil { return nil, err } tmplFiles, err := fs.ReadDir(templateDir, "templates") if err != nil { return nil, err } files := []string{} for _, file := range tmplFiles { if file.IsDir() { continue } files = append(files, fmt.Sprintf("templates/%s", file.Name())) } // 解析HTML模板 templ = template.Must(template.ParseFS(templateDir, files...)) // 执行模板生成HTML内容 var body bytes.Buffer if err = templ.Execute(&body, data); err != nil { return } // 创建PDF生成器 pdfg, err := pdf.NewPDFGenerator() if err != nil { return } // 创建PDF页面 page := pdf.NewPageReader(bytes.NewReader(body.Bytes())) page.EnableLocalFileAccess.Set(true) // 修正后的页脚设置 // 方式1:直接使用内置变量设置页脚内容 page.FooterCenter.Set("Page [page] of [topage]") page.FooterFontSize.Set(7) // 方式2:使用HTML模板作为页脚(如果需要更复杂的样式) // var footerBuf bytes.Buffer // if err = templ.ExecuteTemplate(&footerBuf, "invoiceFooter", data); err != nil { // return nil, err // } // page.FooterHTML.Set(footerBuf.String()) // page.FooterFontSize.Set(7) pdfg.AddPage(page) // 生成PDF字节流 pdfgBytes, err = pdfg.Create() if err != nil { return nil, err } return pdfgBytes, nil }
问题分析与解决方案
你之前的核心问题:
- 错误尝试用JavaScript填充页码,不符合后端实现要求,且wkhtmltopdf后端渲染默认禁用JS
FooterHTML.Set(--footer-html)用法错误,该参数需传入完整HTML内容,而非命令行参数名- 未正确利用wkhtmltopdf内置的
[page](当前页码)和[topage](总页数)变量
正确实现步骤
- 简化HTML模板:移除所有JavaScript代码,直接使用wkhtmltopdf内置占位符,生成PDF时会自动替换为实际页码
- 修正Go代码配置:
- 简单页码需求:直接通过
FooterCenter/FooterLeft/FooterRight传入带占位符的文本 - 复杂样式需求:执行
invoiceFooter模板生成HTML片段,再通过FooterHTML.Set()传入
- 简单页码需求:直接通过
- 依赖版本检查:确保使用最新版
SebastiaanKlippert/go-wkhtmltopdf库,保证内置变量正常解析
注意事项
- 页脚样式需用内联CSS,wkhtmltopdf对页脚/页眉的外部CSS支持有限
- 使用
FooterHTML时,模板无需包含<html>/<body>标签,仅传入页脚内容片段即可
内容的提问来源于stack exchange,提问作者NachoShaman
相关产品推荐
相关产品推荐

