方法一

需要安装file-saver,html2canvas插件

handleExport() {

let htmlDom = document.querySelector('#centerPark');

var FileSaver = require('file-saver');

html2canvas(htmlDom, {

allowTaint: false, //允许污染

taintTest: true, //在渲染前测试图片(没整明白有啥用)

useCORS: true, //使用跨域(当allowTaint为true时这段代码没什么用,下面解释)

background: "#fff",

}).then(canvas => {

if (navigator.msSaveBlob) {

navigator.msSaveBlob(canvas.msToBlob(), 'map.png');

} else {

canvas.toBlob(function (blob) {

FileSaver.saveAs(blob, 'map.png');

});

}

})

},

对于地图截图也可以

handleExport() {

let map = this.mymap;

var FileSaver = require('file-saver')

map.once('rendercomplete', function (event) {

var canvas = event.context.canvas;

if (navigator.msSaveBlob) {

navigator.msSaveBlob(canvas.msToBlob(), 'map.png');

} else {

canvas.toBlob(function (blob) {

FileSaver.saveAs(blob, 'map.png');

});

}

});

map.renderSync();

},

这个方法的问题是标记标绘可以截不上。

方法二

首先进行预览后在导出成pdf,如下图所示:

image.png

专题报告

{{unit}}

时间:{{nowDate | formatdatezhSimple}}

制作人:{{this.producer}}

签发人:{{this.issuer}}

{{textarea}}

导出pdf

js

download() {

var element = document.querySelector("#dialogPage") // 这个dom元素是要导出pdf的div容器

var w = element.style.width; // 获得该容器的宽

var h = element.style.height; // 获得该容器的高

var offsetTop = element.offsetHeight; // 获得该容器到文档顶部的距离

var offsetLeft = element.offsetWidth; // 获得该容器到文档最左的距离

var canvas = document.createElement("canvas");

var abs = 0;

// var win_i = $(window).width(); // 获得当前可视窗口的宽度(不包含滚动条)

var win_i = document.body.offsetWidth; // 获得当前可视窗口的宽度(不包含滚动条)

var win_o = window.innerWidth; // 获得当前窗口的宽度(包含滚动条)

if (win_o > win_i) {

abs = (win_o - win_i) / 2; // 获得滚动条长度的一半

}

canvas.width = w * 2; // 将画布宽&&高放大两倍

canvas.height = h * 2;

var context = canvas.getContext("2d");

context.scale(2, 2);

context.translate(-offsetLeft - abs, -offsetTop);

// 这里默认横向没有滚动条的情况,因为offset.left(),有无滚动条的时候存在差值,因此

// translate的时候,要把这个差值去掉

html2canvas(element).then(canvas => {

var contentWidth = canvas.width;

var contentHeight = canvas.height;

//一页pdf显示html页面生成的canvas高度;

var pageHeight = contentWidth / 592.28 * 841.89;

//未生成pdf的html页面高度

var leftHeight = contentHeight;

//页面偏移

var position = 0;

//a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高

var imgWidth = 595.28;

var imgHeight = 592.28 / contentWidth * contentHeight;

var pageData = canvas.toDataURL('image/jpeg', 1.0);

var pdf = new jsPDF('', 'pt', 'a4');

//有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)

//当内容未超过pdf一页显示的范围,无需分页

if (leftHeight < pageHeight) {

pdf.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight);

} else { // 分页

while (leftHeight > 0) {

pdf.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)

leftHeight -= pageHeight;

position -= 841.89;

//避免添加空白页

if (leftHeight > 0) {

pdf.addPage();

}

}

}

let now = new Date();

// 调用全局过滤器

let date = this.$options.filters.formatdatezhSimple(now);

pdf.save(date + ' 专题报告.pdf');

})

},

handleExport1() {

this.imgDialogVisible = true;

},

openDialog() {

let htmlDom = document.querySelector('#centerPark')

html2canvas(htmlDom, {

allowTaint: false, //允许污染

taintTest: true, //在渲染前测试图片(没整明白有啥用)

useCORS: true, //使用跨域(当allowTaint为true时这段代码没什么用,下面解释)

background: "#fff",

}).then(canvas => {

// this.imgDialogVisible = true;

let img = document.querySelector('#downloadImg');

if (img.hasChildNodes()) {

var childs = img.childNodes;

for (var i = childs.length - 1; i >= 0; i--) {

img.removeChild(childs[i]);

}

}

const dataImg = new Image()

dataImg.style.height = "500px";

dataImg.style.width = "100%";

dataImg.src = canvas.toDataURL('image/png', 1.0); //将图片转为base64, 0-1 表示清晰度,得到图片的base64编码数据

document.querySelector('#downloadImg').appendChild(dataImg);

let blob_ = this.dataURLtoBlob(dataImg.src)

const alink = document.querySelector("#imgA");

alink.href = window.URL.createObjectURL(blob_);

alink.download = "map.png";

// alink.onclick = () => {

// canvas.toBlob(function (blob) {

// saveAs(blob, 'map.png');

// });

// };

})

},

dataURLtoBlob(dataurl) {

var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],

bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);

while (n--) {

u8arr[n] = bstr.charCodeAt(n);

}

return new Blob([u8arr], { type: mime });

},

html 实现桌面截图,JavaScript 实现屏幕截图相关推荐

  1. Windows/Linux 下功能强大的桌面截图软件

    说到桌面截图软件,很多人首先想到的是 QQ 自带的截图,或者更高级功能更强大的 Snipaste 截图工具. 独立版本的 QQ 截图至少我目前没找到官方正式的下载链接,默认需要安装和打开 QQ 才能使 ...

  2. 如何在Windows中使用截图工具进行屏幕截图

    There are lots of tools out there for taking screenshots in Windows. However, you may not need to in ...

  3. python怎么保存到桌面_python3应用windows api对后台程序窗口及桌面截图并保存的方法...

    python的版本及依赖的库的安装 #版本python 3.7.1 pip install pywin32==224 pip install numpy==1.15.3 pip install ope ...

  4. Snip for Mac(桌面截图工具)安装

    1.Snip 简介 Snip 一款用于桌面截图的工具. 2.Snip for Mac 资源列表 Snip v2.0.5771 for Mac,密码:fgab. 2.Snip for Mac 安装 先在 ...

  5. python3应用windows api对后台程序窗口及桌面截图并保存

    目录 python的版本及依赖的库的安装 对后台窗口截图 对桌面截图 python的版本及依赖的库的安装 #版本python 3.7.1 pip install pywin32==224 pip in ...

  6. 远程桌面截图出现黑屏的解决办法

    远程桌面截图出现黑屏的解决办法 2017-02-15 10:59:11   来源:   评论:0 点击:268 第一步:mstsc admin v:服务器IP 连接远程服务器,启动截屏服务第二步:在远 ...

  7. python获取桌面截图

    python获取桌面截图有多种方式,常用的两个如下: 1.PIL中的ImageGrab模块 使用PIL中的ImageGrab模块简单,但是效率有点低,截屏一次需110ms. import time i ...

  8. Unity进行桌面截图并上传到服务器记录

    Unity进行桌面截图并上传到服务器 private string uplaodURL = "http://xxx.xxx.xxx.xxx/UploadImage.aspx"; v ...

  9. html 桌面截图,如何使用javascript在html中截取屏幕截图?

    您只能使用Canvas将图像或视频帧捕获为屏幕截图.但是如果要捕获网页上的特定元素,请尝试以下库: html2canvas 这是代码: 注意:在drawImage()函数中仔细调整尺寸 $(" ...

最新文章

  1. Java排序算法——希尔排序
  2. 「后端小伙伴来学前端了」Vue中全局事件总线(GlobalEventBus)原理及探究过程
  3. 门户网站的免费写手我们可怜的SEOer
  4. 在Global中Application_Error事件处理错误信息
  5. 数仓如何限制临时数据文件下盘量
  6. destools php_php DES加密算法实例分析
  7. SQL 2005数据库转为2000的终极解决方案
  8. 惠普电脑键盘无法调节屏幕亮度
  9. 男生的长相到底有多重要?
  10. 【使用Markdown自动生成目录的几种方法】
  11. Gmail对比Outlook哪个更好
  12. C语言用梯形法求定积分
  13. Android Jetpack 架构组件之 Room
  14. 第7章第29节:四图排版:四张图片并列排版 [PowerPoint精美幻灯片实战教程]
  15. 51单片机教程:8*8 点阵显示字符、数字、简单汉字
  16. 有道文档翻译导出文档_翻译文档的5个技巧
  17. js免费刷流量软件工具源码
  18. 考研数学:罗尔定理的推论
  19. 稳定域的画法 matlab,第05讲 MATLABsimulink稳定性分析、时域分析.ppt
  20. 服务器负载均衡 链路负载均衡 《CDN技术详解》

热门文章

  1. JFrame基本操作
  2. android拖拽排序,DragSortListView:可拖动排序的listview
  3. 数据库Mysql(一)
  4. 教你快速使用AndroidStudio制作出一张合格.9图片
  5. GameFi的崛起之路
  6. AJAX框架衣柜香薰平价,可以放衣柜当香薰的5款香皂,气味好闻不浓重,受潮也不易融化...
  7. ssm+java计算机毕业设计基于web的社团管理系统96m88(程序+lw+源码+远程部署)
  8. python drf_Python正课134 —— DRF 进阶1
  9. dz forum.php空白,服务器更换 升级 dz论坛首页 dz其他页面打开为空白解决方法
  10. mysql时间格式和Java时间格式对应