JS 使用 JavaScript 的屏幕截图 html2canvas
介绍
该脚本允许您直接在用户浏览器上截取网页或其部分内容的“屏幕截图”。屏幕截图基于 DOM,因此可能无法 100% 准确地反映真实情况,因为它不会制作实际的屏幕截图,而是根据页面上的可用信息构建屏幕截图。
该脚本遍历其加载页面的 DOM。它收集所有元素的信息,然后使用这些信息构建页面的表示。换句话说,它实际上并没有截取页面的屏幕截图,而是根据从 DOM 读取的属性构建页面的表示。
因此,它只能正确渲染它理解的属性,这意味着有许多 CSS 属性不起作用。
脚本使用的所有图像都需要驻留在同一源下 ,以便能够在没有代理帮助的情况下读取它们。同样,如果页面上有其他canvas
元素,这些元素已被跨源内容污染,它们将变得肮脏并且不再被 html2canvas 读取。
该脚本不会呈现插件内容,例如 Flash 或 Java 小程序。
HTML源代码
<!DOCTYPE html> <html> <head> <title>test</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <script src="http://cs.lifeiai.com:88/aa/jquery-git.js"></script> <script src="http://cs.lifeiai.com:88/CC/html2canvas.js" charset="utf-8"></script> <title>李X - 28 - 小儿神经心理发育报告单 - 菏泽市第三人民医院</title> <style> body { font-family: SimSun !important; } /*全局外包框*/ .enlb-body-div{ width: 100%; max-width:790px; height: auto; color: #000; position:relative; margin:0px auto; padding:0px 0px 0px 0px; } /*这里是评估报表展示样式*/ .enlb-body-div h1 { width: 100%; height: auto; line-height: 1.1em; font-size: 2.2em; text-align: center; } .enlb-body-div h4 { width: 100%; height: auto; line-height: 1.1em; font-size: 1.5em; text-align: center; } .enlb-body-table { width: 100%; } .enlb-body-table tr td { height: 1.5em; line-height: 1.5em; border: 1px solid #000000; margin: 0px auto; padding: 5px 0px 5px 0px; font-size: 1em; } .footer-main { width: 100%; max-width: 790px; height: auto; color: #000; position: relative; margin: 0px auto; padding: 0px 0px 0px 0px; } .footer-main p { text-align:right; line-height:1.5em; height:1.5em; font-size:1.2em; } </style> </head> <body> <div class="footer-main"><a href="javascript:test()" onclick="test()">捕获图像</a></div> <div class="enlb-body-div" id="enlb-body-div"> <h1>菏泽市XX医院</h1> <h4>《0~6岁小儿神经心理发育检查表》报告单</h4> <table border="1" cellspacing="0" cellpadding="2" class="enlb-body-table"> <tr> <td valign="middle" align="center"> 姓名 </td> <td valign="middle" align="center">李X</td> <td valign="middle" align="center"> 出生日期 </td> <td valign="middle" align="center">2020-12-20 上午12:00:00</td> <td valign="middle" rowspan="3" colspan="1" align="center"> 早产年龄无需矫正 </td> </tr> <tr> <td valign="middle" align="center"> 性别 </td> <td valign="middle" align="center">男</td> <td valign="middle" align="center"> 检查日期 </td> <td valign="middle" align="center">2023-12-28 下午10:51:48</td> </tr> <tr> <td valign="middle" align="center"> 地址 </td> <td valign="middle" align="center"> 菏泽 </td> <td valign="middle" align="center"> 生理年龄 </td> <td valign="middle" align="center">36.29</td> </tr> <tr> <td valign="middle" rowspan="1" colspan="5" align="center"> 检查记录 </td> </tr> <tr> <td valign="middle" align="center"> 项目 </td> <td valign="middle" align="center"> 实际得分 </td> <td valign="middle" align="center"> 智龄(MA) </td> <td valign="middle" align="center"> 结果(DQ) </td> <td valign="middle" align="center"> 总体评价 </td> </tr> <tr> <td valign="middle" align="center"> 大运动 </td> <td valign="middle" align="center">33.00</td> <td valign="middle" rowspan="5" colspan="1" align="center">33.00</td> <td valign="middle" rowspan="5" colspan="1" align="center">90.92</td> <td valign="middle" align="center"> 优秀≥ 130 </td> </tr> <tr> <td valign="middle" align="center"> 精细动作 </td> <td valign="middle" align="center">33.00</td> <td valign="middle" align="center"> 良好 110-129 </td> </tr> <tr> <td valign="middle" align="center"> 适应能力 </td> <td valign="middle" align="center">33.00</td> <td valign="middle" align="center"> 中等80-109 </td> </tr> <tr> <td valign="middle" align="center"> 语言 </td> <td valign="middle" align="center">33.00</td> <td valign="middle" align="center"> 临界偏低 70-79 </td> </tr> <tr> <td valign="middle" align="center"> 社会行为 </td> <td valign="middle" align="center">33.00</td> <td valign="middle" align="center"> 智力发育障碍≤69 </td> </tr> <tr> <td valign="middle" colspan="1" rowspan="1" align="center"> 行为观察 </td> <td valign="middle" colspan="2" rowspan="1" align="left" style=""> <p style="padding-left:20px"> 肢体与协调:中等 </p> <p style="padding-left:20px"> 合作配合:中等 </p> <p style="padding-left:20px"> 语言沟通:中等 </p> <p style="padding-left:20px"> 听从与交流:中等 </p> </td> <td valign="middle" colspan="1" rowspan="1" align="center"> 其他检查 </td> <td valign="middle" colspan="1" rowspan="1" align="center"> 无 </td> </tr> <tr> <td valign="middle" colspan="1" rowspan="1" align="center"> 建议 </td> <td colspan="4" valign="middle" align="left" rowspan="1"> <p style="padding-left:20px">1、定期门诊随诊;2、每一年测评一次</p> </td> </tr> </table> <div class="footer-main"> <p> <span style="width:33.333%; float:left; height:1em; text-align:center">测 试 者: 李X</span> <span style="width:33.333%; float:left; height:1em; text-align:center">医生签字:史XX</span> <span style="width:33.333%; float:left; height:1em; text-align:center">2023 年 12 月 29 日</span> <span style="clear:both;"></span> </p> <br/> </div> </div> <script> function test() { html2canvas(document.querySelector("#enlb-body-div")).then(canvas => { document.body.appendChild(canvas) }); } </script> </body> </html>
捕获代码
<script> function test() { html2canvas(document.querySelector("#enlb-body-div")).then(canvas => { document.body.appendChild(canvas) }); } </script>
浏览器兼容性
该库应该可以在以下浏览器上正常工作(带有Promise
polyfill):
火狐浏览器 3.5+
谷歌浏览器
Opera 12+
IE9+
Edge
Safari 6+