我在做一个订单详情页,用户需要点击“打印”按钮把页面内容打印出来。本地预览时样式都正常,但一调用 window.print() 打印,字体变小、布局错乱,连颜色都没了!
我试过加了个打印专用的 CSS,用 @media print 包裹,但好像没生效。是不是还要设置什么属性?下面是我目前的打印样式:
@media print {
body {
font-size: 14px;
color: #000;
background: #fff;
}
.no-print {
display: none;
}
}
首先得强制浏览器打印背景色。在你的
@media print里加上这个属性:-webkit-print-color-adjust: exact;或者print-color-adjust: exact;。其次,布局要重置。别依赖屏幕上的百分比宽度,打印时最好给个固定的宽度或者直接 100%,把浮动布局改成块级布局,不然很容易错位。
给你改一段能用的代码,试试这个:
写好 CSS 后,在浏览器打印预览界面,记得勾选“背景图形”这个选项,虽然上面的 CSS 能强制一部分,但这个勾选框有时候还是起决定作用的。
如果 CSS 搞不定,或者样式极其复杂,作为后端我通常会建议直接在服务端生成 PDF,比如用 Puppeteer 或者 wkhtmltopdf 把 HTML 渲染成 PDF 流返回给前端,这样样式绝对不走样,就是稍微费点服务器资源。