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 相关文章推荐
JQuery通过Ajax提交表单并返回结果
Jul 31 Javascript
Extjs4中的分页应用结合前后台
Dec 13 Javascript
深入浅出理解javaScript原型链
May 09 Javascript
JavaScript中的toUTCString()方法使用详解
Jun 12 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
Jul 25 Javascript
浅谈JavaScript 覆盖原型以及更改原型
Aug 31 Javascript
移动适配的几种方案(三种方案)
Nov 25 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
Dec 14 Javascript
js分页之前端代码实现和请求处理
Aug 04 Javascript
在vscode中统一vue编码风格的方法
Feb 22 Javascript
Vue组件的使用及个人理解与介绍
Feb 09 Javascript
JS实现简易日历效果
Jan 25 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
ThinkPHP的RBAC(基于角色权限控制)深入解析
2013/06/17 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
2016/12/23 PHP
PHP单元测试框架PHPUnit用法详解
2019/01/23 PHP
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
再谈javascript图片预加载技术(详细演示)
2011/03/12 Javascript
jquery使用append(content)方法注意事项分享
2014/01/06 Javascript
js和jquery如何获取图片真实的宽度和高度
2014/09/28 Javascript
jQuery统计上传文件大小的方法
2015/01/24 Javascript
在线所见即所得HTML编辑器的实现原理浅析
2015/04/25 Javascript
JS+CSS实现的蓝色table选项卡效果
2015/10/08 Javascript
jquery实现超简单的瀑布流布局【推荐】
2017/03/08 Javascript
Vue.js组件间的循环引用方法示例
2017/12/27 Javascript
JavaScript同源策略和跨域访问实例详解
2018/04/03 Javascript
详解搭建es6+devServer简单开发环境
2018/09/25 Javascript
vue搜索和vue模糊搜索代码实例
2019/05/07 Javascript
使用node.JS中的url模块解析URL信息
2020/02/06 Javascript
jquery向后台提交数组的代码分析
2020/02/20 jQuery
实例讲解JavaScript 计时事件
2020/07/04 Javascript
前端性能优化建议
2020/09/17 Javascript
Python中的exec、eval使用实例
2014/09/23 Python
Python IDLE清空窗口的实例
2018/06/25 Python
10 分钟快速入门 Python3的教程
2019/01/29 Python
Python txt文件如何转换成字典
2020/11/03 Python
如何用用Python将地址标记在地图上
2021/02/07 Python
分享CSS3制作卡片式图片的方法
2016/07/08 HTML / CSS
魅力惠奢品线上平台:MEI.COM
2016/11/29 全球购物
PatPat阿根廷:妈妈们的购物平台
2019/05/30 全球购物
Prototype中如何为一个元素添加一个方法
2014/12/08 面试题
MYSQL基础面试题
2012/05/13 面试题
Delphi软件工程师试题
2013/01/29 面试题
教师竞聘演讲稿
2014/05/16 职场文书
运动会运动员赞词
2015/07/22 职场文书
2019大学生暑期实习心得总结
2019/08/21 职场文书
幼师必备:幼儿园期末教师评语50条
2019/11/01 职场文书
解析Java异步之call future
2021/06/14 Java/Android
浅析Python实现DFA算法
2021/06/26 Python