刚解决了html中某div块生成pdf的问题,热乎乎的,赶紧记录下

引入的js传送门:

https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.0.272/jspdf.debug.js

https://cdn.bootcss.com/html2canvas/0.5.0-beta4/html2canvas.js

踩坑记录:

1.生成的pdf中,dom元素间距异常;

2.提高分辨率后,生成的图片有偏差

html语句:

...

下载pdf的点击方法:

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');

})

}

本来想着偷懒,然后没过审。用这个方法生成的pdf有个问题还挺大的,就是生成的文件(尤其是增大了分辨率以后)都是大几百k的,稍微有点内容的基本就将近1mb了。暂时还未找到解决的方式。往后找到了会补上

8.13更新:html2canvas(demo).then.. => 改为 html2canvas(element).then...

还有一个就是转换的容器背景颜色最好设为白色,不然生成的pdf的空白区域默认是黑色的,写了可行的demo,等等上来贴地址

html2canvas提升像素,jspdf + html2canvas 实现html转pdf (提高分辨率版本)相关推荐

  1. jspdf + html2canvas 实现html转pdf -----提高分辨率(高清版版本)

    前提:跟着我一步一步,最终一定会成功!(本人已经实现该功能) 背景:需要做一个导出PDF的功能,网上找有很多,但是一般导出来的都是比较模糊的那种,下面这个是高清版的,导出的PDF都是几M,跟正常手动导 ...

  2. asp.net html2canvas,Vue 结合html2canvas和jsPDF实现html页面转pdf

    结合html2canvas和jsPDF实现html页面转pdf By:授客QQ:103355122 实践环境 win10 Vue 2.9.6 axios 0.18.0 html2canvas 1.0. ...

  3. jspdf + html2canvas 导出pdf

    jspdf + html2canvas 导出pdf 1. 安装依赖 使用jspdf + html2canvas 导出pdf 是先使用html2canvas将要导出的页面转为canvas 然后 将can ...

  4. 使用html2canvas+jspdf导出iframe内容到pdf文件

    使用html2canvas+jspdf导出iframe内容到pdf文件 工具如下: html2canvas.js html2canvas.min.js jspdf.debug.js 代码如下: < ...

  5. React jsPdf+html2canvas 前端生成pdf(分页截断 + 图片质量)

    前言 记录一下最近实现的前端生成pdf的功能,以及遇到的坑和解决方式 由于笔者1年多没碰过react了,之前也比较少使用hooks,实现这个功能也是想复习一下之前的知识,如果有什么写得不好的请指出交流 ...

  6. jsPdf+html2Canvas+react实现前端页面导出pdf,并解决jspdf分页图片过长截断问题

    第一步 在utils下面创建一个工具文件exportPDF.js 以下每一句代码都有对应的注释,并且针对不同情况,作出了相应的解释,如果有需要的话,请耐心看完. import html2Canvas ...

  7. vue html2canvas用法,vue中html2canvas的使用(地图截图)

    1,下载html2canvas插件 npm install --save html2canvas 2,引入html2canvas import html2canvas from 'html2canva ...

  8. html2canvas没有样式,html2canvas没有抓住svg(html2canvas not grabbing svg)

    html2canvas没有抓住svg(html2canvas not grabbing svg) 当我运行这个: html2canvas(document.body, { allowTaint: tr ...

  9. html2canvas ios出问题,html2canvas 在 IOS 微信中绘图白屏黑屏问题

    项目中需要在微信中生成海报图,用户长按海报图后可以将图片发送给微信好友或保存到本地: 海报图在前端使用html2canvas 1.0.0-rc5生成,布局先使用一个高度为0并添加overflow: h ...

  10. 使用jspdf将网页转化成pdf(解决滚动条以外变成黑色问题及缺少echarts图表问题)

    案例 最近遇到一个这样的需求,前端需要将网页或者某个网页中的相关部分,生成pdf,在网上也找到了不少方法,但是拿来用了以后,不是pdf不全的问题,就是有黑色覆盖问题 比如含有黑色部分,页面看不到的滚动 ...

最新文章

  1. 你不知道的三种在for循环中使用setTimeout的方法
  2. UA OPTI512R 傅立叶光学导论16 Nyquist-Shannon采样定理
  3. 多IDC的数据分布设计(一) – 后端技术 by Tim Yang
  4. 浅谈Python的编译与反编译
  5. 软考(软件设计师)考点总结 -- 计算机组成与体系结构
  6. 解决:卸载软件,看我就够了!“启动C:\\Program时出现问题,找不到指定的模块“
  7. android opencv 识别水果,opencv – 在一盘水果中检测香蕉或苹果,成功率 90%. (见图)...
  8. php怎么将农历转换成公历,农历公历转换器,公历农历转换
  9. python3  类中方法的调用
  10. Gitter有趣的软件安装界面
  11. 基于ZXing实现个性彩色好看的二维码
  12. 百度云搭建微信公众平台服务器,微信大众开放平台开发03-百度BAE上搭建属于自己的微信公众平台 -JAVA,微信公众开放平台部署到百度云中BASE2.0,进行调试,木有钱买云服务器的亲们试试...
  13. EXCEL根据两点经纬度计算距离
  14. win10 开机无法自动连接或重启才能连接WIFI的简单解决方法/2022.03
  15. 【RC延迟电路 RC充电电路】 multisim 14.0仿真 参数计算
  16. 完全背包问题完全背包求具体方案
  17. NUC972触摸屏驱动移植过程分析(二)
  18. html背景透明图片固定,请问在HTML中如何把一张图片的背景设定为透明的?
  19. Iptables与Firewalld防火墙(最详细说明)
  20. Unity3D 开关按钮Toggle (可以做单选按钮)

热门文章

  1. jquery中ajax回调函数使用this
  2. Python return语句 函数返回值
  3. SDL(01-10)
  4. jQuery对象和DOM对象的区别
  5. [c++primer][05]表达式
  6. DEL: 扁桃体发炎兼嗓子哑治疗药品
  7. JVM、JRE、JDK、Java SE、Java EE、Java ME
  8. concurrentHashMap扩容细节
  9. ZooKeeper解读
  10. SSRF libcurl protocol wrappers利用分析