使用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
相关产品推荐
相关产品推荐

