亚马逊、Shopify 打单:4×6 面单在浏览器里怎么打
跨境电商打单,面单几乎都是平台给的 PDF,尺寸固定 4×6 英寸(101.6 × 152.4mm)。
看着最简单的一件事,实际翻车率很高:打出来小一圈、条码扫不出、边距多出白边导致面单作废。
三个坑,全是尺寸
| 整体缩小 | 面单比标签小一圈 | 用了 fit 或 shrink 缩放 |
| 有条白边 | 上下或左右少一截 | 纸张尺寸和 PDF 页面不一致 |
| 条码扫不出 | 肉眼看还行,扫枪不认 | 缩放导致模块宽度变化 |
| 打了两页 | 第二页空白 | PDF 尺寸略大于纸张,溢出 |
四个坑一个根因:纸张、PDF 页面、渲染缩放,三者没对齐。
别把 PDF 转成图片
很多老代码的做法是先把 PDF 转 PNG 再打。没有必要,而且会糊——转图那一刻就丢了解析度。
直接打 PDF:
import webPrintPdf from 'web-print-pdf'
await webPrintPdf.printPdfByUrl(
labelPdfUrl, // 平台返回的面单地址
{ paperFormat: '4×6' }, // 渲染页面尺寸
{
printerName: 'Zebra ZD421',
paperFormat: '4 x 6 in', // 驱动里的标签纸名字
scaleMode: 'noscale' // 关键:不缩放
},
{ action: 'print', requestTimeout: 30, bizId: orderId }
)
两个 paperFormat 不是重复:第一个是 PDF 页面尺寸,第二个是打印机的纸张名。名字要跟驱动里的一致,从 getPrinterPapers() 取。
平台各自给什么
- 亚马逊 Buy Shipping:返回 PDF,4×6,直接打
- Shopify Shipping:同样是 PDF,部分承运商给 PNG
- 自建物流面单:可能是 PDF,也可能是图片,按格式分别走 printPdfByUrl / printImageByUrl
不管哪家,先拿到文件再决定方法,别假设都是 PDF。
打印机这一侧的设置
热敏标签机常见 203dpi,4×6 英寸就是 812×1218 个点。三个设置要对:
打废一张的成本
国内面单打废了重打就行,跨境不一样:面单是有单号的,打废的必须作废重开,否则承运商那边对不上。
所以做两个保护:
- 打印前预览(action: 'preview'),第一次接入时逐张核对
- 打印键:orderId + carrier + version,同一版本不重复出纸
排障表
| 面单缩小 | scaleMode 是不是 noscale |
| 有白边 | 纸张尺寸 vs PDF 页面尺寸 |
| 打两页 | PDF 页面比纸张大一点点,改纸张或 pageRanges |
| 条码扫不出 | 打印浓度、机器 DPI |
| 位置整体偏移 | 驱动里的标签原点/间距设置 |
最后
跨境面单是「尺寸敏感 + 不可重来」的组合,容错比国内打单低。
三句话:PDF 直打不转图、纸张名对驱动、永远 noscale。



