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根据数据生成百分比图和柱状图的实例代码
Jul 14 Javascript
JavaScript实现可拖拽的拖动层Div实例
Aug 05 Javascript
去除字符串左右两边的空格(实现代码)
May 12 Javascript
JS锚点的设置与使用方法
Sep 05 Javascript
Javascript for in的缺陷总结
Feb 03 Javascript
JavaScript无缝滚动效果的实例代码
Mar 27 Javascript
JS实现的简单四则运算计算器功能示例
Sep 27 Javascript
vue移动端实现下拉刷新
Apr 22 Javascript
node中的session的具体使用
Sep 14 Javascript
JS实现马赛克图片效果完整示例
Apr 13 Javascript
微信小程序 生成携带参数的二维码
Oct 23 Javascript
Vue中函数防抖节流的理解及应用实现
Apr 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
jQuery EasyUI API 中文文档 - DateBox日期框
2011/10/15 PHP
destoon二次开发模板及调用语法汇总
2014/06/21 PHP
php实现发送微信模板消息的方法
2015/03/07 PHP
php使用preg_match()函数验证ip地址的方法
2017/01/07 PHP
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
2019/02/16 PHP
Laravel解决nesting level错误和隐藏index.php的问题
2019/10/12 PHP
jQuery学习笔记之jQuery原型属性和方法
2014/06/09 Javascript
跟我学习javascript的prototype,getPrototypeOf和__proto__
2015/11/17 Javascript
Vuejs 组件——props数据传递的实例代码
2017/03/07 Javascript
vue元素实现动画过渡效果
2017/07/01 Javascript
基于JavaScript实现前端数据多条件筛选功能
2020/08/19 Javascript
微信小程序实现选项卡功能
2020/06/19 Javascript
CSS3结合jQuery实现动画效果及回调函数的实例
2017/12/27 jQuery
MVVM框架下实现分页功能示例
2018/06/14 Javascript
VUE+Element环境搭建与安装的方法步骤
2019/01/24 Javascript
微信小程序自定义导航栏实例代码
2019/04/05 Javascript
微信小程序调用微信支付接口的实现方法
2019/04/29 Javascript
JS判断数组里是否有重复元素的方法小结
2019/05/21 Javascript
Layer组件多个iframe弹出层打开与关闭及参数传递的方法
2019/09/25 Javascript
electron-vue开发环境内存泄漏问题汇总
2019/10/10 Javascript
js仿京东放大镜效果
2020/08/09 Javascript
在Django中创建第一个静态视图
2015/07/15 Python
Python基于pandas实现json格式转换成dataframe的方法
2018/06/22 Python
python之验证码生成(gvcode与captcha)
2019/01/02 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
2019/03/27 Python
opencv 形态学变换(开运算,闭运算,梯度运算)
2020/07/07 Python
Pandas替换及部分替换(replace)实现流程详解
2020/10/12 Python
39美元购买一副眼镜或太阳镜:39DollarGlasses.com
2018/06/17 全球购物
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
shell的种类有哪些
2015/04/15 面试题
物流专业大学生职业生涯规划书范文
2014/01/15 职场文书
献爱心活动总结
2014/05/07 职场文书
科长个人四风问题整改措施思想汇报
2014/10/13 职场文书
解决python存数据库速度太慢的问题
2021/04/23 Python
Unicode中的CJK(中日韩统一表意文字)字符小结
2021/12/06 HTML / CSS