打出来发虚、条码扫不出:DPI、缩放、矢量化,先搞清是哪一种糊
「打印很模糊」是最难接的一类反馈。发过去的样张在客户眼里是糊的,在你屏幕上是清楚的。
因为在显示器上,糊不糊取决于像素;在纸上,取决于墨点落在哪。
先分成三种糊
| 你看到的 | 真实原因 | 谁的责任 |
|---|---|---|
| 整张都发虚、字边毛糙 | 位图被放大,或渲染分辨率低于打印机 | 渲染 |
| 只有条码/二维码扫不出 | 模块宽度变了,边缘灰 | 缩放 + 浓度 |
| 字清楚,图形糊 | 图片本身分辨率不够 | 素材 |
| 深色块里有白点 | 打印机浓度太低或纸不对 | 设备 |
先对号,再动手。这四种的解法完全不一样,调错方向会越调越糊。
变量一:DPI 与位图缩放
一张 100×100 的 PNG 要显示成 46mm 宽:203dpi 的热敏机打印 46mm 需要约 368 个点。你给它 100 个点,它只能插值放大——插值就是糊。
规则很简单:位图素材的像素数 ≥ 目标尺寸 × 打印 DPI / 25.4。
| 目标宽度 | 203dpi 需要 | 300dpi 需要 |
|---|---|---|
| 40mm | 320 px | 472 px |
| 50mm | 400 px | 590 px |
| 80mm | 640 px | 945 px |
条码、二维码、公章、logo,都适用这条。
变量二:缩放模式
这是最隐蔽的一个。内容比纸宽一点点,shrink 把它缩小 3%——文字看不出来,条码的模块宽度变了,扫枪就认不出。
// 标签、套打:一定 noscale
await webPrintPdf.printHtml(html,
{ width: '50mm', height: '30mm' },
{ printerName: 'Zebra ZD421', scaleMode: 'noscale' }
)
判断办法:打一张带标尺的测试页,量一下 100mm 的线在纸上是不是 100mm。不是,就是被缩放了。
变量三:矢量化
import webPrintPdf from 'web-print-pdf'
// 条码用 SVG,不用 PNG
const svg = await Barcode.toSVG(code, { format: 'CODE128' })
const html = `
<div style="width:50mm">
<div style="font-size:9px">${sku}</div>
<div style="width:46mm">${svg}</div>
</div>`
await webPrintPdf.printHtml(
html,
{ width: '50mm', printBackground: true },
{ printerName: 'Zebra ZD421', paperFormat: '50 x 30 mm', scaleMode: 'noscale' }
)
SVG 有多大就渲染多大,不涉及插值。这是标签场景最省事的做法。
设备侧:浓度与速度
排除了上面三条,才轮到打印机。
- 热敏浓度太低,条空发灰,扫枪解码失败
- 打印速度太快,热敏头没烧透,边缘毛
- 203dpi 打细笔画中文字,本身就吃力,这是物理极限
**调浓度的顺序:先降速,再提浓度。**反过来容易烧头。
排障表
| 现象 | 先查 |
|---|---|
| 条码扫不出,肉眼看还清楚 | 缩放模式是不是 shrink;条码是不是位图 |
| 整页字都糊 | 渲染 DPI / 图片素材分辨率 |
| 二维码边角发灰 | 打印浓度、速度 |
| 只有中文糊,英文清楚 | 字体本身是位图字体,或字号太小 |
| 同一文件,这台机器清那台糊 | 两台 DPI 不同(203 vs 300) |
最后
「打印模糊」不是一个问题,是四个。先问一句:是整体糊,还是只有条码糊? 这一句能省半天。
顺序记住:素材够不够 → 有没有被缩放 → 能不能矢量化 → 最后才动打印机。
本文解析打印发虚和条码无法扫描的四大原因,重点聚焦信息技术相关的三类核心问题:位图DPI不足导致插值模糊、CSS或PDF缩放引发条码模块失真、未使用SVG等矢量格式造成渲染失真。强调前端生成内容时需按像素数≥目标尺寸×DPI/25.4校验位图,通过标尺测试识别隐式缩放,并优先采用SVG实现无损输出。排除前三项后才考虑设备参数。

384

被折叠的 条评论
为什么被折叠?



