前言
前文说了如何识别答题卡,本文来说说怎么生成答题卡。
OpenCV可以用来生成,但是文字换行等场景就比较难实现,这里使用HTML生成答题卡。
A3/A4尺寸
A4 210mm×297mm
A3 420mm×297mm
HTML转Canvas
https://www.psvmc.cn/article/2022-06-21-html-canvas-pdf.html
获取DIV坐标
绝对位置
网页元素的绝对位置,指
该元素的左上角相对于整张网页左上角的坐标
。
首先,每个元素都有offsetTop和offsetLeft属性,表示该元素的左上角与父容器(offsetParent对象)左上角的距离。所以,只需要将这两个值进行累加,就可以得到该元素的绝对坐标。但这里要注意一个问题:要考虑offsetParent的border的宽度。
方式1
1 | // 得到对象的相对浏览器的坐标 |
注意
一定要添加父元素的Border的宽度(clientLeft)。
隐藏的元素要用
opacity: 0;
,不能用display: none;
,否则获取不了位置。这种方式不是特别精确,如果dom的宽高不是整数的时候会出现偏差。
运算效率也相对较低。
方式2
这种方式要注意滚动条所在的DOM是那个。
1 | export function getObjPos(_target, scroll_dom) { |
注意
隐藏的元素要用
opacity: 0;
,不能用display: none;
,否则获取不了位置。运算效率相对高点。
相对位置
网页元素的相对位置,指该元素左上角
相对于浏览器窗口左上角的坐标
。
方法1
获取元素的相对位置,JS还提供了一种更简单的方法:Element.getBoundingClientRect()
Element.getBoundingClientRect()返回一个对象,对象包含了元素距离窗口的位置属性:left、right、top、bottom
1 | let odiv = document.querySelector(".div2"); |
方法2
有了绝对位置以后,获得相对位置就很容易了,只要将绝对坐标减去页面的滚动条滚动的距离就可以了。
1 | function getObjPosR (element) { |
PX和MM互转
方式1
1 | function unitUtil () { |
调用
1 | new unitUtil().px2mm(width) |
方式2
1 | function unitConversion () { |
调用
1 | new unitConversion().px2mm(width) |