我正在构建一个从数据生成pdf文件的工具,我需要构建两种格式:105mm*148mm和105mm*210mm.所以我拿到了整个文档,现在是时候插入分页符了.我用一个简单的类来做:

.page-break { display: block; page-break-before: always; }

现在我必须将这个类插入到我的v-for循环中.所以一个基本的 idea 是计算一个区间,就像每个区间,指数是6的倍数,我插入一.但这不是最好的方法,我想在内容超过90毫米时插入一个中断.

为了做到这一点,我想计算两个断点之间的距离,如果距离接近90mm,则插入一个新的断点.但是,我找不到访问动态DOM元素的方法...

所以问题很简单:如何计算这个距离?或者,如果有更好的方法来实现我的目标,我可以改进什么?

推荐答案

我相信你在每个v-for中添加了一个div/组件,你可以 for each div添加一个唯一的id.下面的方法可以为你提供px中一个div的高度,你将有办法将px转换为mm.

如果你使用jquery,你可以这样做

$('#nthDiv').height();

如果没有,您可以执行以下操作:

inner height:

document.getElementById('#nthDiv').clientHeight;

outer height:

document.getElementById('#nthDiv').offsetHeight; 

如果您有以下代码:

<div v-for="(item, index) in items" :class="{'page-break': isBreakNeeded(index)}" :id="index + 'thDiv'">
   ///Your code
</div>

您需要添加以下方法:

isBreakNeeded (index) {       
   var height = 0
   do {
      index -= 1;
      height += document.getElementById('#' + index + 'thDiv').offsetHeight; 
      } while (index >= 0 || pageBreakAdded[index] == true)
      if(height > threshold){
         pageBreakAdded[index] = true
         return  true
      }
      else{
         return  false
      }
}

您还需要在vue元素的data属性中添加以下哈希,它将跟踪您添加了分页符的索引:

pageBreakAdded: {}

Vue.js相关问答推荐

VueJS不会呈现一个名为None的组件""

Nuxt 3 I18N浏览器检测不起作用

将 html 文件移出 dist vite 中的 src 文件夹

如何使用composition api v-model Select 框获取其他JSON 值?

禁用 vue-cli webpack 编码图像 base64

Webpack 导入的模块不是函数

在重复表行中

如何使用 Vue 命名插槽呈现静态内容列表?

Vue Table 2 - 自定义过滤器

使用 Vue Js 运行 Jest 测试时出现语法错误:无法在模块外使用 import 语句

在 vue 3 中使用 vue-chartjs:createElement 不是函数

当前端和后端位于虚拟 docker 网络中时,如何使用 axios 寻址后端主机

Vue 3 - 带有全局组件的无法解析组件

Vue.js 如果在视图中

此 set-cookie 已被阻止,因为它具有 samesite=lax

如何禁用 nuxt 默认错误重定向

Vue在按钮单击时添加一个组件

偶数行格式化

在 Vue 应用程序中创建一个类的单个实例

如何在 VeeValidate 中自定义错误信息(字段名称)?