Javascript实现html转pdf高清版(提高分辨率)


Posted in Javascript onFebruary 19, 2020

网上一些关于js实现html转pdf的文章大部分最终转成的PDF都不够清晰,今天为大家介绍如何提高js实现html转pdf的清晰度

引入js文件

https://cdn.bootcss.com/jquery/3.4.1/jquery.js

https://cdn.bootcss.com/jspdf/1.5.3/jspdf.min.js

https://cdn.bootcss.com/html2canvas/0.5.0-alpha2/html2canvas.min.js

注意事项:

1.生成的pdf中,dom元素间距异常;

2.提高分辨率后,生成的图片有偏差;

html语句:

<div id="demo">
 ...
</div>

JS代码:

download(){
 var element = $("#demo"); // 这个dom元素是要导出pdf的div容器
 var w = element.width(); // 获得该容器的宽
 var h = element.height(); // 获得该容器的高
 var offsetTop = element.offset().top; // 获得该容器到文档顶部的距离
 var offsetLeft = element.offset().left; // 获得该容器到文档最左的距离
 var canvas = document.createElement("canvas");
 var abs = 0;
 var win_i = $(window).width(); // 获得当前可视窗口的宽度(不包含滚动条)
 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(function(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();
   }
  }
 }
 pdf.save('我的简历.pdf');  
 })
}

更多关于Javascript将html转成pdf的文章请大家点击下面的相关链接

Javascript 相关文章推荐
JavaScript 面向对象的 私有成员和公开成员
May 13 Javascript
基于JQuery的Select选择框的华丽变身
Aug 23 Javascript
input输入框的自动匹配(原生代码)
Mar 19 Javascript
Javascript中的String对象详谈
Mar 03 Javascript
javascript的BOM
May 03 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
Aug 05 Javascript
jquery实现拖动效果(代码分享)
Jan 25 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
May 09 Javascript
AnglarJs中的上拉加载实现代码
Feb 08 Javascript
详解ES6 Promise对象then方法链式调用
Oct 20 Javascript
在vue项目中引入vue-beauty操作方法
Feb 11 Javascript
通过实例了解JS 连续赋值
Sep 24 Javascript
Vue组件模板的几种书写形式(3种)
Feb 19 #Javascript
详解Vue 单文件组件的三种写法
Feb 19 #Javascript
vue中 v-for循环的用法详解
Feb 19 #Javascript
vue 使用v-for进行循环的实例代码详解
Feb 19 #Javascript
JS操作Fckeditor的一些常用方法(获取、插入等)
Feb 19 #Javascript
ES6中new Function()语法及应用实例分析
Feb 19 #Javascript
es6中使用map简化复杂条件判断操作实例详解
Feb 19 #Javascript
You might like
PHP 时间日期操作实战
2011/08/26 PHP
php生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
解决CodeIgniter伪静态失效
2014/06/09 PHP
解密ThinkPHP3.1.2版本之模块和操作映射
2014/06/19 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
php学习笔记之mb_strstr的基本使用
2018/02/03 PHP
一个JavaScript变量声明的知识点
2013/10/28 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之绑定事件
2015/11/19 Javascript
node.js cookie-parser 中间件介绍
2016/06/06 Javascript
JQuery的attr 与 val区别
2016/06/12 Javascript
再次谈论Javascript中的this
2016/06/23 Javascript
JavaScript登录验证码的实现
2016/10/27 Javascript
JS实现多级菜单中当前菜单不随页面跳转样式而发生变化
2017/05/30 Javascript
JS沙箱模式实例分析
2017/09/04 Javascript
详解如何构建一个Angular6的第三方npm包
2018/09/07 Javascript
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
Vue 前端实现登陆拦截及axios 拦截器的使用
2019/07/17 Javascript
React生命周期原理与用法踩坑笔记
2020/04/28 Javascript
浅析JavaScript 函数防抖和节流
2020/07/13 Javascript
[01:23]2014DOTA2国际邀请赛 球迷无处不在Ti现场世界杯受关注
2014/07/10 DOTA
[04:52]2015国际邀请赛LGD战队晋级之路
2015/08/14 DOTA
python脚本实现分析dns日志并对受访域名排行
2014/09/18 Python
python实现超简单端口转发的方法
2015/03/13 Python
python定时检查某个进程是否已经关闭的方法
2015/05/20 Python
linux下安装python3和对应的pip环境教程详解
2019/07/01 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
2020/01/04 Python
详解CSS3中强大的filter(滤镜)属性
2017/06/29 HTML / CSS
三星法国官方网站:Samsung法国
2019/10/31 全球购物
Farah官方网站:男士服装及配件
2019/11/01 全球购物
装修五一活动策划案
2014/01/23 职场文书
安全责任书范文
2014/03/12 职场文书
爱国卫生月活动总结范文
2014/04/25 职场文书
电子专业求职信
2014/06/19 职场文书
2016年寒假社会实践活动总结
2015/03/27 职场文书
干货:如何写好观后感 !
2019/05/21 职场文书