vue-plugin-hiprint打印高度不够,提示:没有足够空间,显示下方内容,问题处理方案及实操

前言

最近在使用vue-plugin-hiprint的时候出现了打印高度不够的情况,同时发现作者已经停止了免费版的维护,但是在收费版svprint上已经解决了该问题,公司更希望使用免费的,所以我们就来看看怎么处理这个问题。

bug的现象

ps:问题链接gitee.com/CcSimple/vu...

解决方案

一般出现这种插件的bug,处理方案无非就是如下几种

  1. 问题转移:即使用其它第三方插件或者自己编写一个插件解决bug
  2. 问题接受:认可这个问题的结果,无需理会
  3. 问题规避:更换项目设计之类的
  4. 问题上报:提交issues等待第三方的插件开发者修复,然后更新插件到修复版

ps: 遗憾的是通过查阅开源项目的说明,发现这个已经停止维护了,但是领导又不想使用收费的,切换一个新的插件,负担也比较重,于是只能去查阅它的源码了

代码分析

通过查阅源码发现问题出在下面这个代码块 他的逻辑是读取模板的每一个元素块,渲染成dom,计算高度,当当前页面的高度不够展示一个元素的时候,就会在这个空隙中返回:没有足够空间,显示下方内容, 可分页高度

优化思路 通过这个,就在想如果当前页不够,那么元素渲染到下一页怎样? 于是开始动手

js 复制代码
//思路 当m(分页html没有获取到tr) 且 curRow有数据(总的dom上是有数据的) 那么就说明高度不够了,理应填充表头
        if (m == 0 && curRow.length && g == curRow.data("rowData")) {
          return {
            target: $('<div></div>'),//元素为div空元素
            length: 0,//这里填0实际没有渲染数量
            height: _assets_plugins_hinnn__WEBPACK_IMPORTED_MODULE_3__.a.px.toPt(s),//高度为剩余高度
            isEnd: !1 //表示有下一页
          }
        }

修复后的效果如下

红色区域的被div占据,后面的数据渲染到下一页了,能正常使用了。

如何应用修复的插件代码

  1. 要知道我们的插件都是由第三方的作者开源到npm上的,那么我们采取的第一个方案就是把这个东西放到npm上,这个过程就不再赘述了
  2. 也可以托管到git私仓上,这里我建了一个仓库存放,源码打包后的内容。

3记得对提交的打包产物打上标签用来做版本号

4最后在package的配置中指向你的源码库

js 复制代码
//配置git的地址加#版本号
"vue-plugin-hiprint": "git+http://xxxxx:9080/xxxx/hiprint-lib.git#v0.0.71",

总结

主要有3个收获

  1. 对vue-plugin-hiprint的内部逻辑的实现进行了研究,积累了这方面的经验。
  2. 个人也实现了一个包管理的流程,虽然npm的更规范,但是我们这是小公司,他们更希望能自己管理自己的代码,所以是发布到npm还是使用git都行,最终目的达到就行了。
  3. 发现了vue-plugin-hiprint内部混淆代码后的for循环的另一种写法,以后想装一下就有思路了,哈哈
ini 复制代码
//这个这个for循环的初始化部分有三个表达式:
//1.  `var d = n.find(".hiprint-printElement-tableTarget:eq(" + u + ")")`
//2.  `c = void 0`
//3.  `h = []`
//这个循环没有条件判断,也没有递增步骤,所以它将是一个无限循环,除非在循环体内有`break`语句来跳出循环
for (var d = n.find(".hiprint-printElement-tableTarget:eq(" + u + ")"), c = void 0, h = []; ;) 

//这个和上一个类似,当 `l` 为 `false` 时,`!l` 为 `true`,循环继续,当 `l` 变为 `true` 时,`!l` 为 `false`,循环结束。
for (var a, p = this.getBeginPrintTopInPaperByReferenceElement(t), s = 0, l = !1; !l;)
相关推荐
LinXunFeng9 小时前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
乘风gg12 小时前
为什么AI 时代来临,大部分人吃不到红利
前端·ai编程·claude
恋猫de小郭13 小时前
Android 限制侧载新进展,谷歌联合国内厂商推验证计划
android·前端·flutter
IT_陈寒13 小时前
Redis内存爆了,原来我漏掉了这个致命配置
前端·人工智能·后端
恋猫de小郭13 小时前
解读 Android 17 全新内存限制,有没有“豁免”后门?
android·前端·flutter
Hyyy14 小时前
理解LLM的基本工作原理:预训练、微调、推理的区别
前端
Gatlin15 小时前
前端逆向与反逆向:一场猫鼠游戏的底层逻辑与实战
前端
Pedantic15 小时前
本地通知(Local Notifications)学习笔记
前端
森蓝情丶15 小时前
我给 AI 搭了个法庭:一个前端仔的 LangGraph 实战全记录
前端·后端
爱勇宝15 小时前
干了近 8 年,一夜之间被裁:AI 时代,程序员最该害怕的不是 AI
前端·后端·程序员