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 相关文章推荐
dess中一个简单的多路委托的实现
Jul 20 Javascript
js 金额文本框实现代码
Feb 14 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
Dec 04 Javascript
jQuery中slice()方法用法实例
Jan 07 Javascript
jQuery子窗体取得父窗体元素的方法
May 11 Javascript
浅谈关于JavaScript API设计的一些建议和准则
Jun 24 Javascript
javascript实现显示和隐藏div方法汇总
Aug 14 Javascript
jQuery中get方法用法分析
Dec 07 Javascript
JS简单生成随机数(随机密码)的方法
May 11 Javascript
详解Node.js利用node-git-server快速搭建git服务器
Sep 27 Javascript
postman自定义函数实现 时间函数的思路详解
Apr 17 Javascript
js实现炫酷光感效果
Sep 05 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
phpmyadmin里面导入sql语句格式的大量数据的方法
2010/06/05 PHP
php将fileterms函数返回的结果变成可读的形式
2011/04/21 PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
2015/01/04 PHP
Yii2框架dropDownList下拉菜单用法实例分析
2016/07/18 PHP
php fseek函数读取大文件两种方法
2016/10/12 PHP
javascript仿php的print_r函数输出json数据
2013/09/13 Javascript
Javascript中call的两种用法实例
2013/12/13 Javascript
js操作滚动条事件实例
2015/01/29 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
JavaScript蒙板(model)功能的简单实现代码
2016/08/04 Javascript
基于angular实现模拟微信小程序swiper组件
2017/06/11 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
2017/07/23 Javascript
vue单页应用中如何使用jquery的方法示例
2017/07/27 jQuery
详解webpack编译速度提升之DllPlugin
2019/02/05 Javascript
js实现随机数小游戏
2019/06/28 Javascript
three.js 将图片马赛克化的示例代码
2020/07/31 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
python中的__init__ 、__new__、__call__小结
2014/04/25 Python
python正则表达式re之compile函数解析
2017/10/25 Python
Python基于动态规划算法解决01背包问题实例
2017/12/06 Python
python使用turtle库绘制树
2018/06/25 Python
django解决跨域请求的问题
2018/11/11 Python
关于pymysql模块的使用以及代码详解
2019/09/01 Python
python定义具名元组实例操作
2021/02/28 Python
Seavenger官网:潜水服、浮潜、靴子和袜子
2020/03/05 全球购物
博柏利美国官方网站:Burberry美国
2020/11/19 全球购物
金融专业个人求职信范文
2013/11/28 职场文书
乡镇办公室工作决心书
2014/03/11 职场文书
《与朱元思书》的教学反思
2014/04/17 职场文书
求职信模板
2014/05/23 职场文书
党员四风剖析材料
2014/08/27 职场文书
争做文明公民倡议书
2014/08/29 职场文书
大学生党员批评与自我批评范文
2014/10/14 职场文书
教师个人教学反思
2016/02/23 职场文书
CSS3新特性详解(五):多列columns column-count和flex布局
2021/04/30 HTML / CSS
Python 数据可视化之Matplotlib详解
2021/11/02 Python