news 2026/6/17 13:40:53

从零到一:用hiprint在Vue项目中打造一个资产领用单打印功能(保姆级教程)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零到一:用hiprint在Vue项目中打造一个资产领用单打印功能(保姆级教程)

从零到一:用hiprint在Vue项目中打造资产领用单打印功能(保姆级教程)

最近在开发一个企业内部管理系统时,遇到了资产领用单打印的需求。经过反复尝试,终于摸索出一套完整的解决方案。本文将带你从零开始,在Vue项目中实现一个功能完善的资产领用单打印模块。

1. 环境准备与基础配置

在开始之前,我们需要确保开发环境已经准备就绪。这里假设你已经创建了一个全新的Vue项目(Vue 2或Vue 3均可)。如果还没有,可以通过以下命令快速创建一个:

vue create asset-print-demo

接下来是hiprint的依赖安装。与常规npm包不同,hiprint目前需要通过CDN方式引入。在项目根目录的public文件夹下创建一个libs目录,用于存放相关资源文件。

关键文件结构

public/ ├── libs/ │ ├── hiprint.css │ ├── print-lock.css │ ├── hiprint.bundle.js │ └── jquery.hiwprint.js └── index.html

index.html<head>部分添加以下引用:

<link rel="stylesheet" href="/libs/hiprint.css"> <link rel="stylesheet" href="/libs/print-lock.css" media="print"> <script src="/libs/hiprint.bundle.js"></script> <script src="/libs/jquery.hiwprint.js"></script>

提示:这些资源文件可以从hiprint官网下载,建议使用最新版本以确保功能完整性和稳定性。

2. 设计打印模板

hiprint的核心优势在于其可视化的模板设计功能。我们可以通过简单的拖拽操作创建专业的打印模板。

首先,在项目中创建一个PrintTemplate.vue组件,用于承载模板设计器:

<template> <div> <div id="templateDesigner"></div> <button @click="saveTemplate">保存模板</button> </div> </template> <script> export default { mounted() { this.initDesigner(); }, methods: { initDesigner() { hiprint.init(); this.template = new hiprint.PrintTemplate({ template: {}, settingContainer: '#templateDesigner' }); }, saveTemplate() { const templateJson = this.template.getJson(); console.log('模板JSON:', templateJson); // 这里可以将模板保存到数据库或本地存储 } } } </script>

模板设计要点

  • 使用"表格"组件展示资产列表
  • 添加文本字段显示领用部门、领用人等信息
  • 设置合适的页眉页脚
  • 确保所有字段名称与后端数据字段一致

3. 数据绑定与打印实现

模板设计完成后,我们需要实现数据绑定和打印功能。创建一个PrintPreview.vue组件:

<template> <div> <button @click="handlePrint">打印资产领用单</button> <div id="printContainer"></div> </div> </template> <script> export default { data() { return { printData: { title: "资产领用单", department: "技术部", recipient: "张三", date: new Date().toLocaleDateString(), assets: [ { id: 1, code: "ASSET-001", name: "笔记本电脑", model: "X1 Carbon", quantity: 1 }, { id: 2, code: "ASSET-002", name: "显示器", model: "P27h-10", quantity: 2 } ] }, templateConfig: {} // 这里存放从数据库或本地存储加载的模板配置 } }, methods: { handlePrint() { hiprint.init(); const printer = new hiprint.PrintTemplate({ template: this.templateConfig, settingContainer: '#printContainer' }); printer.print([this.printData]); } } } </script>

常见问题解决方案

  1. 表格数据不显示

    • 确保表格字段名与数据中的数组字段名一致
    • 检查数据格式,表格数据应该是对象数组
  2. 打印样式异常

    • 添加media="print"的CSS样式表
    • 在打印样式中明确设置页面尺寸和边距
  3. 中文字体显示问题

    • 在CSS中指定中文字体家族
    • 确保打印服务已安装相应字体

4. 高级功能扩展

基础功能实现后,我们可以考虑添加一些增强功能提升用户体验:

批量打印功能

// 在PrintPreview组件中添加 batchPrint(items) { const printer = new hiprint.PrintTemplate({ template: this.templateConfig, settingContainer: '#printContainer' }); const printData = items.map(item => ({ ...this.printData, assets: item.assets, recipient: item.recipient })); printer.print(printData); }

模板管理功能

  • 将模板JSON保存到数据库
  • 实现模板的增删改查
  • 支持多种单据类型模板

打印设置记忆

// 保存用户打印偏好 localStorage.setItem('printSettings', JSON.stringify({ copies: 1, printer: 'default' })); // 读取设置 const settings = JSON.parse(localStorage.getItem('printSettings')) || {};

5. 性能优化与调试技巧

在实际项目中,打印功能可能会遇到各种性能问题。以下是几个优化建议:

  1. 减少DOM操作

    • 避免在打印前频繁更新DOM
    • 使用虚拟DOM技术
  2. 合理使用打印事件

printer.on('start', () => { console.log('开始打印准备'); }); printer.on('end', () => { console.log('打印完成'); });
  1. 错误处理
try { printer.print(data); } catch (error) { console.error('打印失败:', error); this.$message.error('打印失败,请检查打印机连接'); }
  1. 打印预览功能
printer.preview(data, { title: '资产领用单预览', styleHandler: () => { return ` @page { size: A4; margin: 10mm; } body { font-family: "Microsoft YaHei"; } `; } });

通过以上步骤,我们完成了一个功能完善的资产领用单打印模块。在实际开发中,根据具体业务需求,还可以进一步扩展如模板共享、历史记录查询等功能。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 10:10:20

别再死磕微调了!用Prompt Learning在BERT/GPT-3上5分钟搞定小样本分类任务

5分钟解锁Prompt Learning&#xff1a;小样本场景下的BERT/GPT-3高效玩法当你在深夜盯着仅有的50条标注数据发愁时&#xff0c;传统微调方案需要的GPU资源和时间成本可能已经让你望而却步。但有趣的是&#xff0c;预训练模型本身就像一个装满知识的集装箱&#xff0c;而Prompt …

作者头像 李华
网站建设 2026/6/9 6:43:25

微信小程序怎么弄出来

微信小程序怎么弄出来把微信小程序弄出来并不难&#xff0c;难的是弄出来以后能不能正常用。很多项目卡住&#xff0c;不是因为不会选模板&#xff0c;而是主体、类目、支付、内容和审核材料没有提前准备。微信小程序是一种依托微信账号体系运行的业务入口&#xff0c;主要用于…

作者头像 李华
网站建设 2026/6/9 6:41:32

STM32 Modbus实战:从零开始用HAL库实现RTU通信(附完整代码)

STM32 Modbus实战&#xff1a;从零开始用HAL库实现RTU通信&#xff08;附完整代码&#xff09; 1. 项目准备与环境搭建 拿到一块STM32开发板&#xff08;比如常见的F103C8T6&#xff09;&#xff0c;首先要确认硬件连接。RS485模块通常需要连接以下引脚&#xff1a; USART_TX…

作者头像 李华
网站建设 2026/6/10 10:33:41

从Notebook到生产:ML模型服务化落地的五大核心实践

1. 项目概述&#xff1a;这不是一次“部署”&#xff0c;而是一场从实验室到产线的系统性迁移“From Notebook to Production: Running ML in the Real World (Part 4)”——这个标题本身就像一句暗号&#xff0c;懂的人一眼就明白&#xff1a;它不是在讲怎么调参、不是在炫模型…

作者头像 李华