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据option的value值快速设定初始的selected选项
Aug 13 Javascript
jquery autocomplete自动完成插件的的使用方法
Aug 07 Javascript
小试JQuery的AutoComplete插件
May 04 Javascript
jquery多行滚动/向左或向上滚动/响应鼠标实现思路及代码
Jan 23 Javascript
判断ie的两种简单方法
Aug 12 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
Jun 16 Javascript
基于socket.io+express实现多房间聊天
Mar 17 Javascript
详解Jquery 遍历数组之$().each方法与$.each()方法介绍
Jan 09 Javascript
js调用设备摄像头的方法
Jul 19 Javascript
React降级配置及Ant Design配置详解
Dec 27 Javascript
vue计算属性computed、事件、监听器watch的使用讲解
Jan 21 Javascript
vue vantUI tab切换时 list组件不触发load事件的问题及解决方法
Feb 14 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
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
php实现多维数组中每个单元值(数字)翻倍的方法
2015/02/16 PHP
php中isset与empty函数的困惑与用法分析
2019/07/05 PHP
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
JavaScript Event学习第三章 早期的事件处理程序
2010/02/07 Javascript
解决IE下select标签innerHTML插入option的BUG(兼容IE,FF,Opera,Chrome,Safari)
2010/05/13 Javascript
javascript实现切换td中的值
2014/12/05 Javascript
JS+CSS实现仿msn风格选项卡效果代码
2015/10/22 Javascript
jquery对Json的各种遍历方法总结(必看篇)
2016/09/29 Javascript
js绑定事件和解绑事件
2017/04/27 Javascript
jquery.masonry瀑布流效果
2017/05/25 jQuery
JavaScript字符串_动力节点Java学院整理
2017/06/27 Javascript
JavaScript 基础表单验证示例(纯Js实现)
2017/07/20 Javascript
Vue-resource拦截器判断token失效跳转的实例
2017/10/27 Javascript
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
JS中的回调函数实例浅析
2018/03/21 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
layui弹出层按钮提交iframe表单的方法
2018/08/20 Javascript
Vue.js 中的 v-show 指令及用法详解
2018/11/19 Javascript
jquery实现的分页显示功能示例
2019/08/23 jQuery
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
详解微信小程序动画Animation执行过程
2020/09/23 Javascript
[03:23]我的刀塔你不可能这么可爱 第一期金萌萌的故事
2014/06/20 DOTA
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
[40:31]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
2014/04/25 Python
python 字典操作提取key,value的方法
2019/06/26 Python
python代理工具mitmproxy使用指南
2019/07/04 Python
python实现扫雷游戏
2020/03/03 Python
Python常用编译器原理及特点解析
2020/03/23 Python
django前端页面下拉选择框默认值设置方式
2020/08/09 Python
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
敬老月活动总结
2014/08/28 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书