Playwright(Python)生成PDF时页脚模板变量未解析问题求助
Playwright Python PDF自定义页脚变量未替换问题排查与解决
核心问题:模板语法误用
你遇到的问题本质是混淆了其他工具的模板语法——Playwright的PDF页眉页脚变量不是通过{{pageNumber}}这种双大括号语法注入,而是通过带有特定类名的HTML标签来识别替换的。
具体解决步骤
替换正确的变量标签
把你写的{{pageNumber}}和{{totalPages}}替换为带指定class的<span>标签:- 当前页码:
<span class="pageNumber"></span> - 总页码:
<span class="totalPages"></span>
错误写法:
footer_template = "Page {{pageNumber}} of {{totalPages}}"正确写法:
footer_template = """<div style="width: 100%; font-size: 12px; text-align: center;"> Page <span class="pageNumber"></span> of <span class="totalPages"></span> </div>"""- 当前页码:
必须开启页眉页脚显示开关
调用page.pdf()时,必须设置display_header_footer=True,否则自定义模板完全不会生效,变量自然无法被注入:pdf_bytes = page.pdf( path="output.pdf", display_header_footer=True, # 关键开关,不能省略 footer_template="""<div style="width: 100%; font-size: 12px; text-align: center;"> Page <span class="pageNumber"></span> of <span class="totalPages"></span> </div>""", margin={"bottom": "25px"} # 预留足够底部边距,避免页脚被内容遮挡 )确保HTML模板结构合法
模板必须是有效的HTML片段,建议用<div>包裹所有内容,避免纯文本加标签的写法,否则Playwright可能无法正确解析变量。
完整可运行示例
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch() page = browser.new_page() page.goto("https://example.com") # 生成带自定义页脚的PDF page.pdf( path="example_with_footer.pdf", display_header_footer=True, footer_template="""<div style="font-size: 10px; text-align: center; width: 100%;"> Page <span class="pageNumber"></span> of <span class="totalPages"></span> </div>""", margin={"top": "20px", "bottom": "20px"} ) browser.close()
内容的提问来源于stack exchange,提问作者MaduKan
相关产品推荐
相关产品推荐

