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

使用Python+Selenium调用Chrome将HTML存为PDF时pageSize设置不生效

问题原因

你当前的配置写法不符合Chrome打印预览的appState参数规范:pageSize字段不能直接传入尺寸字符串(比如'A3'),Chrome要求该字段传入包含纸张宽高、名称的结构化对象,所以你写的字符串参数会被忽略,自动读取系统区域设置对应的默认纸张尺寸。

修复方案1:调整appState的pageSize写法

把你代码中appState里的"pageSize": 'A3'替换为对应尺寸的结构化配置,常用尺寸的配置参考:

  • A3:{"height_microns": 420000, "width_microns": 297000, "name": "A3"}
  • A4:{"height_microns": 297000, "width_microns": 210000, "name": "A4"}
  • A5:{"height_microns": 210000, "width_microns": 148000, "name": "A5"}
  • Letter:{"height_microns": 279400, "width_microns": 215900, "name": "Letter"}

修改后的appState对应部分示例:

appState = {
    "recentDestinations": [
        {
            "id": "Save as PDF",
            "origin": "local",
            "account":""
        }
    ],
    "selectedDestinationId": "Save as PDF",
    "version": 2,
    "isLandscapeEnabled": False,
    "pageSize": {"height_microns": 420000, "width_microns": 297000, "name": "A3"}, 
    "marginsType": 0,
    "scalingType": 3 , 
    "scaling": "100" ,
    "isHeaderFooterEnabled": False,
    "isCssBackgroundEnabled": True,
}

这个修改完成后就可以正常覆盖系统默认尺寸,不再受区域设置影响。

更稳定的替代方案:调用Chrome DevTools协议打印PDF

如果不需要依赖浏览器的打印预览配置,更推荐直接调用Chrome内置的DevTools协议的Page.printToPDF接口,参数更直观,可控性更强,不会被浏览器默认配置干扰,示例代码如下:

from selenium import webdriver
import base64

def html_to_pdf(url, save_path, paper_width=11.69, paper_height=16.54): # 宽高单位为英寸,此处为A3尺寸
    chopt = webdriver.ChromeOptions()
    chopt.add_argument('--headless=new') # 无头模式,不用弹出浏览器窗口
    driver = webdriver.Chrome(executable_path="你的chromedriver路径", options=chopt)
    driver.get(url)
    # 调用CDP接口打印PDF
    result = driver.execute_cdp_cmd("Page.printToPDF", {
        "landscape": False,
        "paperWidth": paper_width,
        "paperHeight": paper_height,
        "marginTop": 0,
        "marginBottom": 0,
        "marginLeft": 0,
        "marginRight": 0,
        "printBackground": True, # 打印背景
        "displayHeaderFooter": False
    })
    # 保存PDF文件
    with open(save_path, "wb") as f:
        f.write(base64.b64decode(result['data']))
    driver.quit()

# 调用示例
if __name__ == '__main__':
    html_list = [
        "file://C:/Work/pythonTest/1_pdf.html",
        "file://C:/Work/pythonTest/2_pdf.html",
        "file://C:/Work/pythonTest/3_pdf.html"
    ]
    for idx, url in enumerate(html_list):
        html_to_pdf(url, f"./output_{idx+1}.pdf")

常用尺寸对应的英寸值参考:

  • A3:宽11.69,高16.54
  • A4:宽8.27,高11.69
  • Letter:宽8.5,高11

内容的提问来源于stack exchange,提问作者DenDen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:15:01