Vue3工程实现一个打印设计器,以vue-plugin-hiprint为例(一)

       在进行系统开发过程中,表单打印功能往往是必不可少的一个需求。而为了实现方便快捷的表单打印,我们可以借助一些现成的工具和插件来简化开发流程。我找到了一个名字为 vue-plugin-hiprint 负责提供表单打印功能的插件,这个插件是一个JS插件,理论上是可以支持市面上所有的框架。通过引入 vue-plugin-hiprint,开发者可以轻松地在后台管理系统中实现表单的打印功能,提升用户体验,提高工作效率。本系列教程将以云程低代码平台的打印功能为目标,介绍如何引入 vue-plugin-hiprint 插件,并展示如何快速使用该插件实现表单打印功能。

 以Vue3为例

        demo 使用 Vite 创建

1. 安装 vue-plugin-hiprint 

npm i vue-plugin-hiprint 

2. 在 main.js 中引入插件

// 引入打印插件
import { hiPrintPlugin } from "vue-plugin-hiprint";
const app = createApp(App);
// 安装插件
app.use(hiPrintPlugin);

        引入插件后打开浏览器开发者工具,是不是发现有一个 WebSocket 报错,这是咋回事呢?

        是因为这个插件也做了一个配套的 electron 客户端实现静默打印,但是本文介绍的打印方式为浏览器打印的功能,所以在引入的时候的应该禁用 WebSocket 的自动连接。

// 引入打印插件
import { hiPrintPlugin } from "vue-plugin-hiprint";
// 关闭客户端连接
hiPrintPlugin.disAutoConnect()
const app = createApp(App);
// 安装插件
app.use(hiPrintPlugin);

        这样就解决了 WebSocket 报错的问题。

3. 构建拖拽栏

        在构建拖拽栏的时候,需要记住几个步骤。

  1. 需要使用 hipinrt.init() 方法进行将 provider 注册 (可以理解为注册组件)。
  2. 如果使用的是默认面板的拖拽元素,需要将元素添加上 tid 属性,它的值必须和默认面板中对应。
  3. 元素的类名上需要添加 ep-draggalbe-item 类名,否则无法进行拖拽操作。
  4. 在 DOM 加载完成后添加拖拽事件。
// template 部分
// 以文字为例
<div class="ep-draggable-item item" tid="defaultModule.text">
     <!-- 这里填写你想在页面上显示的内容   -->
</div>
// script 部分
// 引入默认面板
import { hiprint, defaultElementTypeProvider } from "vue-plugin-hiprint";
// 注册默认面板
hiprint.init({
    providers: [defaultElementTypeProvider()],
});
// 必须在 dom 加载完成之后给刚刚绑定上的元素添加上拖拽事件
onMounted(() => {
  hiprint.PrintElementTypeManager.buildByHtml($(".ep-draggable-item"));
});

 

效果如图

4. 构建设计器和属性栏 

        还是一样,先得给设计器和属性栏一个容器 (DOM) 用来存放内容

// template 部分
// 设计器部分
<div id="hiprint-printTemplate" class="hiprint-printTemplate"></div>
// 属性栏部分
<div id="PrintElementOptionSetting" class="PrintElementOptionSetting"></div>

        就和 Vue 中组件挂载完才能对它进行操作一样,如果需要构建出相应的内容,需要等到 DOM 加载完后进行构建的操作

// script 部分
// 创建一个 hiprint 的模板实例
let hiprintTemplate = ref()
const buildDesigner = () => {
  // 绑定拖拽事件
  hiprint.PrintElementTypeManager.buildByHtml($(".ep-draggable-item"));
  // new hiprint.PrintTemplate 的返回值是一个模板的实例
  // 传入的参数各种的配置项
  // settingContainer:属性栏面板
  hiprintTemplate.value = new hiprint.PrintTemplate({
    settingContainer: "#PrintElementOptionSetting", 
  });
  // 构建一个设计模板,指定容器,是否开启网格展示
  hiprintTemplate.value.design("#hiprint-printTemplate",{grid:true});
};

onMounted(() => {
  // DOM 挂载完进行构建
  buildDesigner();
});

        写完样式后可以得到如下效果

        这样我们就完成了打印设计器的创建,这时我们就可以进行打印模板的设计了

5. 设计一个打印模板

        通过拖拉拽的方式设计,如图所示

        当我们设计好模板,发现一个问题,我的模板数据怎么保存呢?别急,刚刚我们不是创建了一个 hiprint 的实例化对象嘛。在那个对象上面有一个 getJson 的方法获取我们设计的这个模板的JSON数据,所以我们可以设计一个按钮来保存模板数据。

        因为是 Json 数据,我们可以选择直接保存在 localStorage 中,如果需要下次进入页面读取JSON 数据的模板,可以使用实例化对象上的 update 方法进行读取保存的 JSON 数据。

// 保存模板到 localStorage 中
const save = () => {
  localStorage.setItem("JSON",JSON.stringify(hiprintTemplate.value.getJson()))
};

 

保存的JSON数据

// 在重新进入时加载上次保存的模板 需要在创建完实例后进行加载
hiprintTemplate.value.update(JSON.parse(localStorage.getItem("JSON")))

6. 总结

        本章节将 vue-plugin-hiprint 插件的基本设计功能进行了实现,在下一章节我们会将模板与自己的业务表单数据进行结合,实现一个随着表单数据变化而打印内容变化的动态打印功能。

7. 参考资料

  1. vue-plugin-hiprint:https://gitee.com/CcSimple/vue-plugin-hiprint
  2. 使用-入门篇:【vue-plugin-hiprint】使用-入门篇 (qq.com)
  3. hiprint官方文档:http://hiprint.io/docs/start
  4. 体验环境:https://www.yunbangong100.com:31110/app/group

### 如何在 Vue3 中使用 `vue-plugin-hiprint` 实现 PDF 打印 #### 安装依赖库 为了能够在 Vue3 项目中使用 `vue-plugin-hiprint` 插件,需先通过 npm 或 yarn 来安装该插件。命令如下所示[^2]: ```bash npm install -S vue-plugin-hiprint ``` #### 配置插件 完成安装之后,在项目的入口文件(通常是 main.js 或者类似的初始化文件)引入并注册此插件: ```javascript import { createApp } from &#39;vue&#39; import App from &#39;./App.vue&#39; // 导入 HiPrint 插件 import VuePluginHiPrint from &#39;vue-plugin-hiprint&#39;; const app = createApp(App) app.use(VuePluginHiPrint, { // 可选配置项... }) app.mount(&#39;#app&#39;) ``` #### 使用组件进行打印操作 接下来可以在页面中的某个按钮点击事件或者其他触发条件下来调用打印功能。下面是一个简单的子来展示如何定义一个用于启动打印过程的方法。 假设有一个名为 PrintComponent 的单文件组件 (`.vue`) 文件: ```html <template> <div class="print-container"> <!--打印的内容 --> <section id="content-to-print"> <h1>这是要被打印的内容</h1> <p>更多内容...</p> </section> <!-- 触发打印的按钮 --> <button @click="handlePrint">打印</button> </div> </template> <script setup> import { ref } from "vue"; import { usePrinter } from &#39;vue-plugin-hiprint&#39;; function handlePrint() { const printer = new usePrinter(); printer.print({ templateId: &#39;default&#39;, // 如果有预设模板则指定ID contentSelector: &#39;#content-to-print&#39;, type: &#39;pdf&#39; // 设置输出格式为 pdf }); } </script> <style scoped> /* 样式省略 */ </style> ``` 上述代码展示了怎样创建一个带有特定 ID 的 HTML 结构作为待打印区域,并设置了一个按钮用来触发展示打印对话框的功能。当用户点击这个按钮时会执行 `handlePrint()` 方法,进而调用了来自 `vue-plugin-hiprint` 提供的 API 函数来进行实际的打印工作[^1]。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值