每次接到"做个送货单打印功能"的需求就头疼?手动调边距、对齐字段、反复预览调试的日子该结束了。去年双十一大促期间,我们电商后台团队用hiprint的可视化设计器重构了所有打印模板,新员工培训时间从3天缩短到30分钟。今天就用一个真实的电商送货单案例,带你体验什么叫"拖拽出奇迹"。
还在用CSS媒体查询硬啃打印样式?或是手动拼接HTML字符串生成模板?hiprint的设计器直接把打印模板制作变成了积木游戏。它的核心优势在于:
对比传统方案,hiprint在电商场景下的效率提升尤为明显。我们测试过一个包含客户信息、商品清单、合计金额的典型送货单:
| 开发方式 | 耗时 | 后期修改成本 |
|---|---|---|
| 纯CSS方案 | 8小时 | 需要重写样式 |
| HTML拼接方案 | 5小时 | 容易破坏结构 |
| hiprint设计器 | 23分钟 | 拖拽即时生效 |
提示:hiprint的模板JSON可以存入数据库,不同客户能保存个性化打印样式
假设我们有个Vue 3 + Element Plus的电商后台,需要为物流部门制作送货单。打开hiprint在线设计器(无需安装),跟着以下步骤操作:
javascript复制// 设计器初始化代码
const hiprintTemplate = new hiprint.PrintTemplate({
template: {
panels: [{
width: 297,
height: 210,
paperHeader: 30,
paperFooter: 20,
printElements: []
}]
}
});
送货单通常包含这些核心信息:
客户信息区(顶部):
商品清单区(中部):
汇总区(底部):
拖动"文本"组件到面板,右键设置数据绑定:
javascript复制{
"options": {
"field": "customerName",
"title": "客户名称",
"fontSize": 12,
"textAlign": "left"
}
}
商品清单需要动态绑定数组数据:
javascript复制columns: [
{
"title": "序号",
"field": "index",
"width": 40
},
{
"title": "商品名称",
"field": "productName",
"width": 120
}
// 其他列...
]
注意:表格支持自动分页,勾选"重复表头"确保每页都显示列标题
设计好的模板可以无缝接入现有项目:
点击设计器右上角"生成模板",会得到类似这样的JSON:
json复制{
"panels": [{
"printElements": [
{
"options": {
"field": "orderNo",
"title": "订单编号"
}
}
// 其他元素...
]
}]
}
建议在Vue项目中建立/src/print-templates/delivery.js专门存放模板配置。
在打印方法中传入Vue组件数据:
javascript复制// 打印方法示例
function handlePrint() {
const printData = {
orderNo: order.value.number,
customerName: order.value.customer,
detailList: order.value.items.map((item, index) => ({
index: index + 1,
productName: item.name,
// 其他字段...
}))
};
hiprintTemplate.print(printData, {
printer: 'EPSON_TM-T20',
title: '电商送货单'
});
}
虽然设计器能满足大部分需求,但有时需要额外样式:
css复制/* 全局打印样式覆盖 */
@media print {
.hiprint-printPaper {
box-shadow: none !important;
margin: 0 auto !important;
}
/* 隐藏非打印元素 */
.no-print {
display: none !important;
}
}
当基础送货单满足后,可以尝试这些进阶玩法:
根据不同客户类型加载不同模板:
javascript复制const templateMap = {
'vip': VIP_TEMPLATE,
'normal': NORMAL_TEMPLATE
};
function loadTemplate(type) {
return new hiprint.PrintTemplate({
template: templateMap[type]
});
}
利用内置插件轻松添加:
javascript复制{
"options": {
"field": "orderNo",
"barcodeType": "code128",
"height": 40,
"displayValue": true
}
}
通过WebSocket实现远程打印:
javascript复制// 连接打印服务
hiwebSocket.start('ws://print-server:17521');
// 获取网络打印机列表
const printers = hiprintTemplate.getPrinterList();
// 指定打印机打印
hiprintTemplate.print2(data, {
printer: '仓库激光打印机'
});
三个月内为20多家客户部署hiprint后,我们总结出这些经验:
javascript复制// 组件卸载时清理
onUnmounted(() => {
hiprintTemplate.destroy();
});
对于超大规模打印任务(如万级订单),推荐以下优化方案:
javascript复制// 缓存已加载的模板
const templateCache = new Map();
function getTemplate(id) {
if(templateCache.has(id)) {
return templateCache.get(id);
}
// ...加载逻辑
}
最后分享一个真实案例:某生鲜电商接入hiprint后,错单率从3%降至0.2%,因为司机能清晰看到高亮显示的加急订单标记——这只是在设计器里给特定字段加了红色背景色而已。