很多时候需要用到把页面上的某个块元素用图片的形式导出来,例如导出一些表格构成的单据

思路:把指定的html内容转换成canvas,然后再转换成图片

这里推荐使用这两个库


<script src="https://superal.github.io/canvas2image/canvas2image.js"></script>
<script src="https://html2canvas.hertzen.com/dist/html2canvas.js"></script> <script>
//使用例子
var html2Img = {
init: function() {
this.initDom();
this.initEvent();
},
initDom: function() {
this.$el = {};
this.$el.$startBtn = $('#clickBtn');//触发元素
this.$el.$htmlSource = $('#youhtml');//要导出的html
this.$el.$pngContent = $('#imgshow');//转换后的图片展示
},
initEvent: function() {
var me = this;
this.$el.$startBtn.on('click', function() {
me.initSavePng(2);
});
},
initSavePng: function(N) {
var me = this;
var sourceContent = me.$el.$htmlSource;
var width = sourceContent.width();
var height = sourceContent.height();
var offsetTop = sourceContent.offset().top;
var offsetLeft = sourceContent.offset().left;
var canvas = document.createElement("canvas");
var canvas2D = canvas.getContext("2d");
// 不能小于1,否则图片不完整
var scale = N;
canvas.width = (width + offsetLeft) * scale;
canvas.height = (height + offsetTop) * scale;
canvas2D.scale(scale, scale);
canvas2D.font = "Microsoft YaHei";
var options = {
//检测每张图片都已经加载完成
tainttest: true,
canvas: canvas,
scale: scale,
//dom 放大的宽度,放大倍数和清晰度在一定范围内成正相关
width: width + offsetLeft,
// 开启日志,可以方便调试
logging: true,
//dom 放大的宽度,放大倍数和清晰度在一定范围内成正相关
height: height + offsetTop
};
html2canvas(sourceContent, options).then(function(canvas) {
//显示图片-start
var img = window.Canvas2Image.convertToPNG(canvas, width * scale, height * scale);
me.$el.$pngContent.append(img);
// 将图片恢复到原始大小
me.$el.$pngContent.find('img').css({
width: width,
height: height
});
//显示图片-end
//导出图片
window.Canvas2Image.saveAsPNG(canvas, width * scale, height * scale);
});
}
};
html2Img.init();
</script>

js把某个div或其他元素用图片的形式导出或下载的更多相关文章

  1. js控制div滚动条,滚动滚动条使div中的元素可见并居中

    1.html代码如下 <div id="panel"> <div id="div1"></div> <div id=& ...

  2. js实现未知宽高的元素在指定元素中垂直水平居中

    js实现未知宽高的元素在指定元素中垂直水平居中:本章节介绍一下如何实现未知宽高的元素在指定元素下实现垂直水平居中效果,下面就以span元素为例子,介绍一下如何实现span元素在div中实现水平垂直居中 ...

  3. 使用HTML5的JS选择器操作页面中的元素

    文件命名为:querySelector.html,可在Chrome浏览器中预览效果. 1 <!DOCTYPE html> 2 <html lang="en"> ...

  4. 转载:js和jquery获取父级元素、子级元素、兄弟元素的方法

    转载网址: 先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比. JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当最DOM元 ...

  5. JS(原生js和jq方式)获取元素属性(自定义属性),删除属性(自定义属性)

    JS(原生js和jq方式)获取元素属性(自定义属性),删除属性(自定义属性) 以下内容: 一.获取元素的属性 二.设置元素的属性 三.删除元素的属性 一.获取元素的属性 1-原生JS 获取属性 .ge ...

  6. JS拖拽div(移动)

    <!doctype html><html><head> <meta charset="utf-8"> <title>JS ...

  7. JS实现拖动div层移动

    JS实现拖动div层移动 在谈到拖动div层之前,我们有必要来了解下 下面JS几个属性的区别----  pageX,pageY,layerX,layerY,clientX,clientY,screen ...

  8. js和jquery获取父级元素、子级元素、兄弟元素的方法{转}

    先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比 JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当成DOM元素   原生的 ...

  9. js进阶 11-13 jquery如何包裹元素和去除元素外的包裹

    js进阶 11-13  jquery如何包裹元素和去除元素外的包裹 一.总结 一句话总结:wrap().wrapAll().unwrap().innerWrap()四个方法 1.jquery中unwr ...

随机推荐

  1. Extjs6 grid 导出excel功能类,支持renderer

    /* grid 导出excel扩展(纯客户端,提交到后台再导的可以自己改改代码也在) 参考自 https://blog.csdn.net/tianxiaode/article/details/4596 ...

  2. libcurl.a 跨平台

    编译成libxxx.a文件后, 通过lipo把多个不同架构的文件合并起来成为一个文件 在build setting 设置  head search path , library search path ...

  3. python3.6安装docx模块

    1.下载 python_docx-0.8.6-py2.py3-none-any.whl 地址: http://www.lfd.uci.edu/~gohlke/pythonlibs/2.在这个网页的最下 ...

  4. RSA公私钥获取模数和质数

    实际项目中,发现前端在生成公钥对象的时候并不是使用这种方式,而是通过对应的模数跟质数来构造公钥对象的,这样的话,需要进一步将生成的公钥取出对应的模数和质数.openssl.java api都可以将质数 ...

  5. Xamarin.Forms 未能找到路径“x:\platforms”的一部分

    https://stackoverflow.com/questions/45500269/xamarin-android-common-targets-error-could-not-find-a-p ...

  6. VMware密匙

    5A02H-AU243-TZJ49-GTC7K-3C61N 新版本密室:FF31K-AHZD1-H8ETZ-8WWEZ-WUUVA

  7. php----------const 定义的常量和define()定义的常量的区别?

    用法一:const用于类成员变量,一经定义不可修改,define用于全局常量,不可用于类成员变量的定义,const可在类中使用也可以在类外面使用,define不能. 定义:const 常量名=值; 没 ...

  8. gRPC学习

    概述 gRPC 一开始由 google 开发,是一款语言中立.平台中立.开源的远程过程调用(RPC)系统. 在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法, ...

  9. Nginx 配置文件优化

    user www www; #用户&组 worker_processes auto; #通常是CPU核的数量存储数据的硬盘数量及负载模式,不确定时将其设置为可用的CPU内核数(设置为“auto ...

  10. 【Spark-SQL学习之三】 UDF、UDAF、开窗函数

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...