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中的其他对象
Jan 16 Javascript
Javascript 函数中的参数使用分析
Mar 27 Javascript
javascript oop开发滑动(slide)菜单控件
Aug 25 Javascript
jquery的选择器的使用技巧之如何选择input框
Sep 22 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
Oct 29 Javascript
jQuery封装的获取Url中的Get参数示例
Nov 26 Javascript
Ext GridPanel加载完数据后进行操作示例代码
Jun 17 Javascript
基于jQuery实现Accordion手风琴自定义插件
Oct 13 Javascript
Vue.js对象转换实例
Jun 07 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
Dec 16 Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
Jan 20 Javascript
vue element ui validate 主动触发错误提示操作
Sep 21 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在线打包程序源码
2008/07/27 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
2011/04/20 PHP
基于Zend的Config机制的应用分析
2013/05/02 PHP
php通过curl模拟登陆DZ论坛
2015/05/11 PHP
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
2010/03/14 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
2012/08/09 Javascript
jquery插件制作 表单验证实现代码
2012/08/17 Javascript
jQuery实现单行文字间歇向上滚动源代码
2013/06/02 Javascript
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
AngularJS转换响应内容
2016/01/27 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
2016/05/11 Javascript
js中遍历Map对象的简单实例
2016/08/08 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
js 性能优化之快速响应的用户界面
2017/02/15 Javascript
JS实现DIV高度自适应窗口示例
2017/02/16 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
2017/12/29 Javascript
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
Python version 2.7 required, which was not found in the registry
2014/08/26 Python
python 转换 Javascript %u 字符串为python unicode的代码
2016/09/06 Python
python虚拟环境virtualenv的安装与使用
2017/09/21 Python
Selenium定位元素操作示例
2018/08/10 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
python输出决策树图形的例子
2019/08/09 Python
python图形绘制奥运五环实例讲解
2019/09/14 Python
python单向循环链表原理与实现方法示例
2019/12/03 Python
python中可以声明变量类型吗
2020/06/18 Python
python如何用matplotlib创建三维图表
2021/01/26 Python
CSS3中的clip-path使用攻略
2015/08/03 HTML / CSS
Mybag美国/加拿大:英国奢华包包和名牌手袋网站
2020/02/16 全球购物
开办化妆品公司创业计划书
2013/12/26 职场文书
数控专业毕业生自荐信范文
2014/03/04 职场文书
战友聚会主持词
2014/04/02 职场文书
开展读书活动总结
2014/06/30 职场文书
学生偷窃检讨书
2014/09/25 职场文书
2015领导干部廉洁自律工作总结
2015/07/23 职场文书
决心书格式范文
2015/09/23 职场文书