HTML2CANVAS使用总结

2023-10-27

前言

最近遇到了个功能,要把表单转化成图片来保存,这让我想到了一个插件HTML2CANVAS,这里给大家分享下它的用法和我使用的过程

html2canvas 能够实现在用户浏览器端直接对整个或部分页面进行截屏。这个html2canvas脚本将当页面渲染成一个canvas图片,通过读取DOM并将不同的样式应用到这些元素上实现。

它不需要来自服务器任何渲染,整张图片都是在客户端浏览器创建。当浏览器不支持Canvas时,将采用Flashcanvas或ExplorerCanvas技术代替实现。

以下浏览器能够很好的支持该脚本:Firefox 3.5+, Google Chrome, Opera新的版本, IE9以上的浏览器。

20110820223646_656 

html2canvas可以通过获取HTML的某个元素,然后生成Canvas,能让用户保存为图片。 这个项目主要是生成canvas,那么我们如果需要生成图片还需要将它转化为图片地址。

基本语法

html2canvas(element, options);
html2canvas(document.body, {
  onrendered: function(canvas) {
    var url = canvas.toDataURL();//图片地址
    document.body.appendChild(canvas);
  },
  width: 300,
  height: 300
});

或者使用ES6的promise

 //两个参数:所需要截图的元素id,截图后要执行的函数, canvas为截图后返回的最后一个canvas
 html2canvas(document.getElementById('id')).then(function(canvas) {document.body.appendChild(canvas);});

可用参数

参数名称 类型 默认值 描述
allowTaint boolean false Whether to allow cross-origin images to taint the canvas---允许跨域
background string #fff Canvas background color, if none is specified in DOM. Set undefined for transparent---canvas的背景颜色,如果没有设定默认透明
height number null Define the heigt of the canvas in pixels. If null, renders with full height of the window.---canvas高度设定
letterRendering boolean false Whether to render each letter seperately. Necessary if letter-spacing is used.---在设置了字间距的时候有用
logging boolean false Whether to log events in the console.---在console.log()中输出信息
proxy string undefined Url to the proxy which is to be used for loading cross-origin images. If left empty, cross-origin images won't be loaded.---代理地址
taintTest boolean true Whether to test each image if it taints the canvas before drawing them---是否在渲染前测试图片
timeout number 0 Timeout for loading images, in milliseconds. Setting it to 0 will result in no timeout.---图片加载延迟,默认延迟为0,单位毫秒
width number null Define the width of the canvas in pixels. If null, renders with full width of the window.---canvas宽度
useCORS boolean false Whether to attempt to load cross-origin images as CORS served, before reverting back to proxy--这个我也不知道是干嘛的

例子

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>html2canvas example</title>
    <script type="text/javascript" src="html2canvas.js"></script>
</head>
<script type="text/javascript">
function takeScreenshot() {
  console.log('test');
    html2canvas(document.getElementById('view'), {
        onrendered: function(canvas) {
            document.body.appendChild(canvas);
        },
      // width: 300,
      // height: 300
    });
}
</script>
<body>
    <div id="view" style="background:url(test.jpg) 50%; width: 700px; height: 500px;">
        <input type="button" value="截图" onclick="takeScreenshot()">
    </div>
</body>

</html>

如何在vue+ts环境调用

前提条件

项目安装html2canvas,jq

npm install html2canvas
npm install jquery

HTML部分

<div id="#printArea">需要打印的区域</div>  
  <div class="print">
          <iframe id='iframe' style="display:none;"></iframe>
</div>

JS部分

页面引入 html2canvas、jquery
  import html2canvas from 'html2canvas';
       import $ from 'jquery';
 
  
  // 打印
   private onPrint() {
         const el: any = $('#printArea')[0];
         const iframe = window.frames[0];
         iframe.document.close();
         html2canvas(el, {
           scale: 1,
           width: el.offsetWidth,
           height: el.offsetHeight,
           allowTaint: true,
           useCORS: true,
         }).then(function (canvas) {
              const context: any = canvas.getContext('2d');
              context.mozImageSmoothingEnabled = false;
              context.webkitImageSmoothingEnabled = false;
              context.msImageSmoothingEnabled = false;
              context.imageSmoothingEnabled = false;
              const src64: any = canvas.toDataURL();
              const newImg: any = document.createElement('img');
              newImg.crossOrigin = 'Anonymous';
              newImg.src = src64;
              iframe.document.write('<img src="' + newImg.src + '" />');
              setTimeout(() => {
                  iframe.window.print();
              });
         });
      }

效果图

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTML2CANVAS使用总结 的相关文章

  • JS文件中的System.register是什么意思?

    在 Angular 2 中使用指令时 JS 文件中的 System register 是什么意思 我认为这个问题并不特定于 Angular2 中的指令 它是关于 ES6 TypeScript 和其他使用 SystemJS 的现代编译器的一般
  • html 图像 src 调用 javaScript 变量

    这是我的代码 我想问 我怎样才能做到这一点 img src img apple 我一直在尝试使用 call 函数和 document onload 但它根本不起作用 有人可以救我吗 我假设你只是想用 javascript 更新图像 src
  • 有没有办法在 React 中自动播放音频而不使用 onClick 事件?

    我在尝试在 componentDidMount 中播放音频时收到此错误 未捕获 承诺中 DOMException play 失败 因为用户没有先与文档交互 componentDidMount document getElementById
  • Twitter Bootstrap - 下拉菜单 - 箭头键不适用于 Firefox 中的输入标签

    要求 我想在带有用户名和密码字段的下拉菜单中放置一个登录表单 我可以做到这一点 除了以下问题之外 一切正常 Issue 打字时我无法使用箭头键 上 下 firefox 当输入位于下拉代码之外时 这很有效 这适用于其他浏览器 例如 googl
  • 在 UIWebView 中禁用复制和粘贴

    几乎 我已经尝试了一切方法来禁用复制 粘贴UIWebView但对我来说没有任何作用 我正在加载我的UIWebView来自字符串 字符串数组 如下所示 webView loadHTMLString NSString stringWithFor
  • 只保留 A-Z 0-9 并使用 javascript 从字符串中删除其他字符

    我正在尝试验证字符串以使它们成为有效的网址 我只需要保留 A Z 0 9 并使用以下命令从字符串中删除其他字符javascript or jquery 例如 贝儿餐厅 我需要将其转换为 百丽餐厅 所以字符被删除 只保留 A Z a z 0
  • 使用 Javascript/Node.js 在代码内执行 mongoimport

    node js javascript 中是否有任何库可供个人使用mongoimport在代码中 据我了解 mongoimport 有点像 exe 您必须先执行它 然后才能使用其文本输入环境 是否可以在我的代码中执行 mongoimport
  • Angular 2 将字符串转换为 md5 哈希

    我找到了ts md5 https www npmjs com package ts md5包 但在示例中它有一个hashStr方法 但现在不行了 类型上不存在属性 hashStr Md5 使用该错误后 该错误会记录在我的控制台中 我怎样才能
  • JQuery $.ajax() 在 java servlet 中发布数据

    我想将数据发送到 java servlet 进行处理 数据将具有可变长度并采用键 值对 A1984 1 A9873 5 A1674 2 A8724 1 A3574 3 A1165 5 数据不需要这样格式化 这就是我现在的方式 var sav
  • 在 Chrome 开发者工具中禁用调试器语句

    我正在尝试对恶意 JavaScript 进行逆向工程 当我最初加载侧面时 会注入 JS 代码 其中包括 debugger 语句并将断点注入我的 chrome 开发人员控制台 通过stackoverflow阅读 禁用所有断点does not帮
  • 如何将两个 span 元素一个向左对齐,另一个向右对齐?

    我有两个 span 要素 span style margin right auto 2012 XYZ Corp All Rights Reserved span span style margin left auto Built with
  • 在循环中调用 setTimeout 未按预期工作

    下面的 JavaScript 应该 在我看来 以 0 5 秒的间隔播放一系列音符 但它会将它们全部作为一个同时的和弦来演奏 知道如何修复它吗 function playRecording if notes length gt 0 for v
  • 如何使用 NextJS 使用自托管字体face?

    使用 NextJS 的字体 我已经阅读了有关如何在 NextJS 中使用自托管字体的不同主题 我得到了什么 wait compiling 当我这样做时 font face font family montserrat src url myp
  • 如何在 Javascript 中连接 C# ActiveX 事件处理程序

    我尝试使用几个代码片段将 ActiveX 对象与 Javascript 事件处理程序挂钩 我无法确定为什么事件处理程序没有被调用 带有项目的 Github 存储库 https github com JesseKPhillips Csharp
  • 如何将项目插入到特定索引处的空数组中?

    我想将一个项目插入到空数组的指定索引中 我看到有 Array prototype splice 方法 但是 如果我在空数组上使用 splice 它只会添加项目来结束数组 如下所示 var a a splice 3 0 item 3 cons
  • 如果 jquery 验证激活,如何在单选按钮中放置红色边框[重复]

    这个问题在这里已经有答案了 我的问题是 如果 jquery 验证像示例图片中那样激活 我无法使单选按钮具有红色边框 任何人都可以帮我解决这个问题吗 http i38 photobucket com albums e149 eloginko
  • 如何给URL添加变量?

    我正在尝试从网站收集数据 我有一个 Excel 文件 其中包含该网站的所有不同扩展名 F i www example com example2 我有一个脚本可以成功从网站中提取 HTML 但现在我想为所有扩展自动执行此操作 然而 当我说 s
  • 标题的下边框小于宽度

    我需要创建一个下划线效果底部边框小于h2标题的宽度 通常我不上传图片 但我认为这可能有助于进一步解释问题 您可以为此使用伪元素 例子 http jsfiddle net SZ39x pseudo border position relati
  • highchart堆积柱每个类别的总数据

    我想获取每个类别的总数据 这point stackTotal只给出活动数据的总数 从我粘贴的代码示例中 我想知道每种水果的总消耗量 因此 即使我单击右上角图例上的乔的名字 这使得堆叠图表上的所有乔信息都处于非活动状态 我仍然可以知道约翰 简
  • Html5画布最热门的任意形状

    我正在尝试开发可以在画布中渲染图像和文本的程序 我尝试处理画布中图像的点击 但它适用于可矩形图像 我的问题 您是否知道处理单击画布中图像的可见部分 非透明部分 的解决方案或框架 我正在寻找 ActionScript hitTestObjec

随机推荐

  • 【Linux】调试器---gdb的使用

    文章目录 一 背景知识 二 安装gdb 三 gdb的用法 使用须知 gdb的常用指令 1 进入调试 2 退出调试操作 3 显示源代码 4 设置断点breakPoint 5 查看断点信息 禁用断点 开启断点 删除断点 6 运行程序 开始调试r
  • 开发者自述:我是怎样理解支持向量机(SVM)与神经网络的

    https www leiphone com news 201705 v10u2BOvGHEbzBpV html 写在前面 囫囵吞枣看完SVM 个人感觉如果不好好理解一些概念 或说如果知其然而不知其所以然的话 不如不看 因此我想随便写一写
  • 03MySQL数据库表练习

    第一题 1 创建数据库 mysql gt create database Market 2 创建数据表customers 在c num字段上添加主键约束和自增约束 在c birth字段上添加非空约束 mysql gt use Market
  • 二进制,八进制,十进制,十六进制相互转换的快速记忆法

    1 十进制转换为R进制 都是使用除数取余法来转换 结果按倒序来 a 十进制转换为二进制 就一直除以2 直到余数比2小 商为0为止 b 十进制转换为八进制 就一直除以8 直到余数比8小 商为0为止 c 十进制转换为十六进制 就一直除以16 直
  • 2023/09/19 qt day3

    头文件 ifndef WIDGET H define WIDGET H include
  • java String转数组

    java String转数组 String转集合 将字符串转化为数组 如果你和我一样你们公司有人这样存数据的话 这就很气人 如果用分割的方法的话 还需要去除前后两个中括号 还有两个双引号要分割 气死人 所以想要转数组例如 arr a b c
  • 解决fastjson解析List对象出现{“$ref“:“$.data[0]“}的问题

    返回数据问题 例子 List
  • Linux 实验六

    编写 段bash shell程序 保存为 program sh 完成以下输出 可循环执 please input a number 5 回 5 4 3 2 1 4 3 2 1 3 2 1 2 1 1 bin bash echo please
  • Linux网络编程:多进程实现TCP通信

    服务器端代码 TCP 通信的服务器端 多进程实现并发服务器 父进程accept 子进程用于通信 include
  • linux如何运行ipynb文件_怎么在Jupyter里打开ipynb文件

    方法一 1 在使用Anaconda集成环境安装TensorFlow时 里面自带安装 Jupyter 安装完成后 打开开始菜单找到Anaconda3 64 bit 点击Anaconda Prompt 类似windows的命令行工具 2 在命令
  • QT怎么发送带结构体数据的信号?

    当发送的信号是结构体时 第一步 定义一个结构体 并在包含该结构体的类里面注册该结构体 通过此方法Q DECLARE METATYPE T 第二步 作为信号输出时 不能直接传结构体 要先包装一下结构再传出去 接收时 也要拆开包装 才能拿到数据
  • docker 镜像/容器的打包、导出、导入

    目录 一 将变动过的容器打包生成新的镜像 二 对镜像进行导出导入 1 将镜像导出为一个镜像img文件 2 将img镜像文件导入 复制出一个完全一样镜像 三 对容器进行导入导出 1 将容器导出为一个镜像tar文件 2 将镜像tar文件导入 生
  • vuejs项目纯js导出word、在线下载富文本内容或者网页另存为word文件

    所有前端导入导出方法集合 前端必备技能知识 JS导出Blob流文件为Excel表格 Vue js使用Blob的方式实现excel表格的下载 流文件下载 勤动手多动脑少说多做厚积薄发 CSDN博客 js文件流导出excel表格效果 重点 a
  • 【有奖调研】

    2022年 区块链价值被不断挖掘 成为Web3 元宇宙 数字藏品等众多产业的基石 我们面向广大开发者以及区块链爱好者发起本次调研 以了解大家对这项极具潜力的新技术的认知 为感谢大家的认真作答 我们将从有效问卷中随机抽取30名幸运者 赠送精品
  • 使用gsoap由.h文件生成wsdl相关问题

    生成wsdl文件步骤 头文件如下 ws interface h ifndef WS INTERFACE H define WS INTERFACE H 注意 以下注释是必要的 gsoap ns service name ws interfa
  • win7、win10进程pid4占用80端口的解决办法

    https jingyan baidu com article 7e4409533ffe092fc1e2ef10 html 今天想用wamp架设服务器 但是程序启动不起来 查看系统端口 80端口被占用 进程PID是4 我的系统是WIN10
  • 9-基于STM32无刷直流电机控制器的设计仿真与实现(原理图+源码+仿真工程+论文+PPT+参考英文文献)

    基于STM32无刷直流电机控制器的设计仿真与实现 原理图 源码 仿真工程 论文 PPT 参考英文文献 文章目录 基于STM32无刷直流电机控制器的设计仿真与实现 原理图 源码 仿真工程 论文 PPT 参考英文文献 资料 任务书 设计说明书
  • 【详解C语言指针】我真的让C指针给我唱征服了~乌拉

    文章目录 前言 一 字符指针 1 字符指针的定义 2 字符指针的作用 3 字符指针的特点 二 指针数组 1 指针数组的定义 2 指针数组的使用 三 数组指针 1 数组指针的定义 2 细说指针 2 1 指针类型 2 2 指针所指向的类型 2
  • Qt 多线程中的信号/槽

    Qt 多线程中的信号 槽 connect函数的五个参数表示的意义依次为 sender signal receiver slot connectionTpye 其中槽可以是receiver的成员函数 或者是任意可访问的静态函数 在多线程的情形
  • HTML2CANVAS使用总结

    前言 最近遇到了个功能 要把表单转化成图片来保存 这让我想到了一个插件HTML2CANVAS 这里给大家分享下它的用法和我使用的过程 html2canvas 能够实现在用户浏览器端直接对整个或部分页面进行截屏 这个html2canvas脚本