前端实现打印图像功能


Posted in HTML / CSS onAugust 27, 2019

前提:后台返回是绘制医用心电波形报告的数据,前端通过canvas在网页上绘制再进行打印并生成PDF文档!

一.  尝试LODOP打印插件

之前前端表单打印功能有使用过LODOP打印插件,需安装相应的LODOP的打印软件,lodop的使用方法2种。第一种方式是通过收集前端标签内容元素成对象 var   htmlstr= $("#ECGReport").html(); 通过 LODOP.ADD_PRINT_HTM(20,60, 400, 900,htmlstr); 的lodop方法导入到自带编辑的打印软件中进行打印,当然字体大小,颜色,加粗等都可以设置;第二种是自定义内容,模板样式已确定,可通过方法将打印内容一块块放入到打印区域中, LODOP.ADD_PRINT_HTM(20,60, 400, 900,'生成报告标题'); 并调节左右边距;但是使用第一种方式收集标签元素内容时候,发现不能收集到canvas里面的图层样式和内容,并果断放弃,如果网页无canvas绘制内容,可使用;

优点:可自定义打印内容和样式,打印百分比也可以编辑;缺点:需下载安装打印lodop打印软件,页面canvas的内容无法提取到打印区域;

二. 尝试前端window.print()

优点:代码编写方便,如配合谷歌浏览器提供的打印功能,操作很方便;

缺点:如整页有部分是打印内容,打印区域不方便控制,有一定失真;

三.尝试html2canvas + jsPDF.js

html2canvas(document.querySelector('#modelContents'), {
   allowTaint: true, taintTest: false, scale: '1', dpi: '300', background: '#fff'}
) .then(function(canvas) {  
//元素id为exportContent 
 let ctx =canvas.getContext("2d"); 
 var imgData = canvas.toDataURL('image/png') var img = new Image() 
 var contentWidth = canvas.width; var contentHeight = canvas.height;
 img.src = imgData; 
 $("#ECGReport").append(img); 
 img.width =1000; img.height = 740; 
 //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
 var imgWidth = 595.28;
 var imgHeight = 555.28/contentWidth * contentHeight; 
 //根据图片的尺寸设置pdf的规格,要在图片加载成功时执行,之所以要*0.5是因为比例问题 
 img.onload = function () { 
 //此处需要注意,pdf横置和竖置两个属性,需要根据宽高的比例来调整,不然会出现显示不完全的问题 
  var doc=''
 if (this.width > this.height) { 
   doc = new jsPDF('l','px', [1000, 720]) 
  } else {
   doc = new jsPDF('p','pt', [4000, 2960]) 
  }
  doc.addImage(imgData, 'png', 30, 40, 500, 360,'NONE') //比例可根据需要调节
 //根据下载保存成不同的文件名 doc.save('pdf_' + new Date().getTime() + '.pdf') };})

通过html2canvas的方法将canvas和表单内容提取出并转成图片,canvas内容不会丢失,为了防止图像内容失真严重,将原图内容放大倍数之后提取,放大倍数的计算可通过A4纸张的大小和打印机的分辨率300dpi等参数算出差不多为4倍,1920*1080的电脑屏幕dpi一般为72dpi,通过jsPDF的方法将图片导入到PDF文档中;

其实也可以通过jsPDF的方法去编辑报告单中的患者姓名等信息,同样canvas内容绘制逻辑也可以通过jsPDF的方法去实现,但是jsPDF对中文不支持需下载使用的 ttf字体文件到项目中,比较繁琐和不方便;缺点:虽实现大体需求,但是生成的波形图像还是有失真和锯齿现象,是canvas绘制中不可避免。

总结:

canvas的绘图严重依赖分辨率,如对svg操作比较熟悉的话,制图的保真问题比较看重,建议使用svg方法,svg是矢量图,不依赖于像素,无限放大也不会失真。如纯表单打印功能还比较容易实现连接打印机打印。

以上所述是小编给大家介绍的前端实现打印图像功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

HTML / CSS 相关文章推荐
今天学到的CSS最新技术(与图片背景相关)
Dec 24 HTML / CSS
使用css3制作动感导航条示例
Jan 26 HTML / CSS
用CSS3绘制三角形的简单方法
Jul 17 HTML / CSS
CSS3中设置3D变形的transform-style属性详解
May 23 HTML / CSS
CSS3 毛玻璃效果
Aug 14 HTML / CSS
HTML5地理定位与第三方工具百度地图的应用
Nov 17 HTML / CSS
详解通过变换矩阵实现canvas的缩放功能
Jan 14 HTML / CSS
x-ua-compatible content=”IE=7, IE=9″意思理解
Jul 22 HTML / CSS
HTML5 embed标签定义和用法详解
May 09 HTML / CSS
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
Jan 10 HTML / CSS
HTML5如何使用SVG的方法示例
Jan 11 HTML / CSS
AmazeUI 缩略图的实现示例
Aug 18 HTML / CSS
html5 canvas绘制网络字体的常用方法
Aug 26 #HTML / CSS
HTML5超炫酷粒子效果的进度条的实现示例
Aug 23 #HTML / CSS
HTML5语义化元素你真的用对了吗
Aug 22 #HTML / CSS
解决HTML5中滚动到底部的事件问题
Aug 22 #HTML / CSS
手摸手教你用canvas实现给图片添加平铺水印的实现
Aug 20 #HTML / CSS
html5 canvas实现给图片添加平铺水印
Aug 20 #HTML / CSS
导出HTML5 Canvas图片并上传服务器功能
Aug 16 #HTML / CSS
You might like
提升PHP执行速度全攻略(下)
2006/10/09 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
2012/08/31 PHP
PH P5.2至5.5、5.6的新增功能详解
2014/07/14 PHP
PHP中的常见魔术方法功能作用及用法实例
2015/07/01 PHP
php传值方式和ajax的验证功能
2017/03/27 PHP
javascript 写类方式之三
2009/07/05 Javascript
javascript 多种搜索引擎集成的页面实现代码
2010/01/02 Javascript
关于extjs4如何获取grid修改后的数据的问题
2013/08/07 Javascript
Jquery设置attr的disabled属性控制某行显示或者隐藏
2014/09/25 Javascript
基于node实现websocket协议
2016/04/25 Javascript
JavaScript用JSONP跨域请求数据实例详解
2017/01/06 Javascript
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
详解html-webpack-plugin插件(用法总结)
2018/09/12 Javascript
Vue2 添加数据可视化支持的方法步骤
2019/01/02 Javascript
[54:27]TNC vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
利用Python为iOS10生成图标和截屏
2016/09/24 Python
请不要重复犯我在学习Python和Linux系统上的错误
2016/12/12 Python
Python递归实现汉诺塔算法示例
2018/03/19 Python
在VS Code上搭建Python开发环境的方法
2018/04/06 Python
python线程的几种创建方式详解
2019/08/29 Python
python3利用Axes3D库画3D模型图
2020/03/25 Python
Flask缓存静态文件的具体方法
2020/08/02 Python
用canvas画心电图的示例代码
2018/09/10 HTML / CSS
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
印尼综合在线预订网站:Tiket.com(机票、酒店、火车、租车和娱乐)
2018/10/11 全球购物
.NET程序员的数据库面试题
2012/10/10 面试题
初中三年学生的学习自我评价
2013/11/13 职场文书
交通安全演讲稿
2014/01/07 职场文书
企业人事任命书
2014/06/05 职场文书
销售团队获奖感言
2014/08/14 职场文书
教师节校长致辞
2015/07/31 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书
golang gopm get -g -v 无法获取第三方库的解决方案
2021/05/05 Golang
2021年最新用于图像处理的Python库总结
2021/06/15 Python
星际争霸:毕姥爷vs解冻01
2022/04/01 星际争霸
Python实现双向链表
2022/05/25 Python