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 相关文章推荐
FireFox中textNode分片的问题
Apr 10 Javascript
js编写trim()函数及正则表达式的运用
Oct 24 Javascript
javascript自动生成包含数字与字符的随机字符串
Feb 09 Javascript
JS随机调用指定函数的方法
Jul 01 Javascript
JQuery的Pager分页器实现代码
May 03 Javascript
基于Bootstrap+jQuery.validate实现表单验证
May 30 Javascript
jQuery中get方法用法分析
Dec 07 Javascript
Bootstrap实现提示框和弹出框效果
Jan 11 Javascript
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
Dec 25 Javascript
vue-cli3中vue.config.js配置教程详解
May 29 Javascript
js实现贪吃蛇小游戏(加墙)
Jul 31 Javascript
Jquery 获取相同NAME 或者id删除行操作
Aug 24 jQuery
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函数解决SQL injection
2006/10/09 PHP
PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
2016/09/11 PHP
Thinkphp5.0自动生成模块及目录的方法详解
2017/04/17 PHP
phpinfo无法显示的原因及解决办法
2019/02/15 PHP
详解如何实现Laravel的服务容器的方法示例
2019/04/15 PHP
跟随鼠标旋转的文字
2006/11/30 Javascript
用javascript实现无刷新更新数据的详细步骤 asp
2006/12/26 Javascript
JavaScript 组件之旅(四):测试 JavaScript 组件
2009/10/28 Javascript
javascript 运算数的求值顺序
2011/08/23 Javascript
js实现在字符串中提取数字
2013/11/05 Javascript
js实现跟随鼠标移动且带关闭功能的图片广告实例
2015/02/26 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
使用Vue.js创建一个时间跟踪的单页应用
2016/11/28 Javascript
微信小程序实现的涂鸦功能示例【附源码下载】
2018/01/12 Javascript
深入理解js 中async 函数的含义和用法
2018/05/13 Javascript
JQuery特殊效果和链式调用操作示例
2019/05/13 jQuery
Node4-5静态资源服务器实战以及优化压缩文件实例内容
2019/08/29 Javascript
Vue使用NProgress的操作过程解析
2019/10/10 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
详解Python中的文件操作
2016/08/28 Python
python实现Windows电脑定时关机
2018/06/20 Python
pandas 转换成行列表进行读取与Nan处理的方法
2018/10/30 Python
python调用staf自动化框架的方法
2018/12/26 Python
浅谈Python大神都是这样处理XML文件的
2019/05/31 Python
python将三维数组展开成二维数组的实现
2019/11/30 Python
Python列表操作方法详解
2020/02/09 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
2020/04/29 Python
python 获取计算机的网卡信息
2021/02/18 Python
英国最大的独立家具零售商:Furniture Village
2016/09/06 全球购物
前台文员职责范本
2014/03/07 职场文书
家长会欢迎词
2015/01/23 职场文书
安装工程师岗位职责
2015/02/13 职场文书
简短的36句中秋节祝福信息语句
2019/09/09 职场文书
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
2021/06/05 Python
postgresql使用filter进行多维度聚合的解决方法
2021/07/16 PostgreSQL