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;)
相关推荐
weixin_382395238 小时前
为小工厂量身打造:本地部署的物料管理系统带缺料计算
前端·制造
__zRainy__8 小时前
解决pnpm v10+不自动构建
前端·pnpm·工程化
猫猫不是喵喵.9 小时前
Vue3 Props 属性
前端·javascript·vue.js
醉城夜风~10 小时前
CSS元素显示模式(display)
前端·css
AI大模型-小华10 小时前
Codex 三方充值快速入门指南
java·前端·数据库·chatgpt·ai编程·codex·chatgpt pro
做前端的娜娜子13 小时前
同一链接实现 PC Web 与移动 H5 自适应
前端·掘金·金石计划
小帅不太帅13 小时前
架构没变、规模没变,DeepSeek V4 Flash 正式版凭什么暴涨 47 分?
前端·aigc·deepseek
jarvisuni13 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
卷福同学15 小时前
AI编程出海第二步:验证关键词能否做站
前端·人工智能·后端