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 星级评分效果(手写)
Dec 24 Javascript
解析js原生方法创建表格效率测试
Jul 08 Javascript
javascript四舍五入函数代码分享(保留后几位)
Dec 10 Javascript
如何调试异步加载页面里包含的js文件
Oct 30 Javascript
JavaScript中的console.profile()函数详细介绍
Dec 29 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
Nov 16 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
Dec 19 Javascript
微信小程序实现左滑动删除效果
Mar 30 Javascript
JavaScript字符串处理常见操作方法小结
Nov 15 Javascript
JS实现压缩上传图片base64长度功能
Dec 03 Javascript
JS实现扫码枪扫描二维码功能
Jan 03 Javascript
让Vue响应Map或Set的变化操作
Nov 11 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框架Phpbean说明
2008/01/10 PHP
php自定义的格式化时间示例代码
2013/12/05 PHP
PHP开发框架kohana3 自定义路由设置示例
2014/07/14 PHP
php中explode的负数limit用法分析
2015/02/27 PHP
php检测apache mod_rewrite模块是否安装的方法
2015/03/14 PHP
php限制ip地址范围的方法
2015/03/31 PHP
CodeIgniter常用知识点小结
2016/05/26 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
2016/06/30 PHP
完美解决在ThinkPHP控制器中命名空间的问题
2017/05/05 PHP
解析 thinkphp 框架中的部分方法
2017/05/07 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
JavaScript窗口功能指南之在窗口中书写内容
2006/07/21 Javascript
js 复制或插入Html的实现方法小结
2010/05/19 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
2014/01/24 Javascript
jQuery 实现侧边浮动导航菜单效果
2014/12/26 Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
2016/01/19 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
2016/02/18 Javascript
内容滑动切换效果jquery.hwSlide.js插件封装
2016/07/07 Javascript
jquery动态添加文本并获取值的方法
2016/10/12 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
JS实现table表格固定表头且表头随横向滚动而滚动
2017/10/26 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
2018/08/11 Javascript
Vue实现回到顶部和底部动画效果
2019/07/31 Javascript
对vue生命周期的深入理解
2020/12/03 Vue.js
python之import机制详解
2014/07/03 Python
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
浅析python中的分片与截断序列
2016/08/09 Python
Python之csv文件从MySQL数据库导入导出的方法
2018/06/21 Python
python模糊图片过滤的方法
2018/12/14 Python
python实现两张图片拼接为一张图片并保存
2019/07/16 Python
Django使用消息提示简单的弹出个对话框实例
2019/11/15 Python
pytorch AvgPool2d函数使用详解
2020/01/03 Python
运动会致辞稿50字
2014/02/04 职场文书
幼儿园教师工作总结2015
2015/04/02 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
Python用any()函数检查字符串中的字母以及如何使用all()函数
2022/04/14 Python