chromedp(Go)设置WithMarginTop时报-32000无效打印机设置错误
错误原因与解决方案
- 核心原因是参数单位不匹配:chromedp的
page.PrintToPDF边距参数单位为英寸,你设置的20对应20英寸,远超过Chromium默认A4纸(高度11.7英寸)的可支持范围,触发参数校验失败。而Puppeteer默认对边距参数做了单位转换,默认单位为厘米,20厘米换算为英寸约7.87,处于合法范围内,所以不会报错。 - 另一个可能触发该错误的原因是桌面版Chromium带界面运行时,会优先读取系统默认打印机配置,和传入的打印参数冲突。
修复方法
- 先对边距做单位换算,如果你需要的是20毫米边距,换算为英寸约为0.787,修改参数即可:
buf, _, err := page.PrintToPDF(). WithMarginTop(0.787). WithMarginBottom(0.787). Do(ctx)
- 如果确实需要大边距,同步调整纸张尺寸到足够大小,纸张尺寸参数单位同样为英寸:
buf, _, err := page.PrintToPDF(). WithPaperWidth(15). // 纸张宽度设为15英寸 WithPaperHeight(30). // 纸张高度设为30英寸 WithMarginTop(20). Do(ctx)
- 初始化chromedp时强制开启无头模式,避免系统打印机配置干扰:
opts := append(chromedp.DefaultExecAllocatorOptions[:], chromedp.Flag("headless", "new"), ) allocCtx, cancel := chromedp.NewExecAllocator(context.Background(), opts...) defer cancel() ctx, cancel := chromedp.NewContext(allocCtx) defer cancel()
内容的提问来源于stack exchange,提问作者mike james
相关产品推荐
相关产品推荐

