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 在firebug调试时用console.log的方法
May 10 Javascript
jquery选择器之属性过滤选择器详解
Jan 27 Javascript
jquery的ajax和getJson跨域获取json数据的实现方法
Feb 04 Javascript
jquery仿百度经验滑动切换浏览效果
Apr 14 Javascript
自己封装的一个简单的倒计时功能实例
Nov 23 Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
Nov 22 Javascript
VS Code转换大小写、修改选中文字或代码颜色的方法
Dec 15 Javascript
利用vue.js实现被选中状态的改变方法
Feb 08 Javascript
js定义类的方法示例【ES5与ES6】
Jul 30 Javascript
vue实现axios图片上传功能
Aug 20 Javascript
Vue element-ui父组件控制子组件的表单校验操作
Jul 17 Javascript
Jquery cookie插件实现原理代码解析
Aug 04 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
2020显卡排行榜天梯图 显卡天梯图2020年3月最新版
2020/04/02 数码科技
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
2008/09/10 PHP
ThinkPHP模板输出display用法分析
2014/11/26 PHP
php过滤所有的空白字符(空格、全角空格、换行等)
2015/10/27 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
2016/12/29 PHP
浅谈PHP中类和对象的相关函数
2017/04/26 PHP
DHTML 中的绝对定位
2006/11/26 Javascript
javascript 学习笔记(八)javascript对象
2011/04/12 Javascript
JS中不为人知的五种声明Number的方式简要概述
2013/02/22 Javascript
jquerydom对象的事件隐藏显示和对象数组示例
2013/12/10 Javascript
js实现上传图片预览的方法
2015/02/09 Javascript
js实现超酷的照片墙展示效果图附源码下载
2015/10/08 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
2015/11/24 Javascript
第二次聊一聊JS require.js模块化工具的基础知识
2016/04/17 Javascript
Javascript动画效果(1)
2016/10/11 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
一篇文章弄懂javascript中的执行栈与执行上下文
2019/08/09 Javascript
JS实现提示效果弹出及延迟隐藏的功能
2019/08/26 Javascript
JS实现贪吃蛇游戏
2019/11/15 Javascript
webpack3.0升级4.0的方法步骤
2020/04/02 Javascript
python+mysql实现简单的web程序
2014/09/11 Python
Python的Django框架中的Context使用
2015/07/15 Python
python中numpy包使用教程之数组和相关操作详解
2017/07/30 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
2019/01/10 Python
pycharm配置pyqt5-tools开发环境的方法步骤
2019/02/11 Python
scrapy-redis源码分析之发送POST请求详解
2019/05/15 Python
Python中一些深不见底的“坑”
2019/06/12 Python
python连接PostgreSQL数据库的过程详解
2019/09/18 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
2020/04/14 Python
基于Python的自媒体小助手---登录页面的实现代码
2020/06/29 Python
python eventlet绿化和patch原理
2020/11/21 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
小学生作文评语集锦
2014/12/25 职场文书
电影建党伟业观后感
2015/06/01 职场文书
幸福来敲门观后感
2015/06/04 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书