资讯专栏INFORMATION COLUMN

将HTML页面转换为PDF文件并导出

Airy / 2044人阅读

摘要:目前,在大多数的管理系统中,都会有这样一个功能根据相关的条件查询相应的数据,并生成可视化报表,然后可导出为文件。利用将新的元素生成图片利用将图片生成文件并保存到本地。

目前,在大多数的管理系统中,都会有这样一个功能:根据相关的条件查询相应的数据,并生成可视化报表,然后可导出为PDF文件。本文只展现生成可视化报表之后导出PDF文件的过程,生成可视化的报表可使用Echarts,D3js等框架。

1.需要引入的文件

html2canvas.js(根据实际情况选择相应的版本)
jspdf.min.js(根据实际情况选择相应的版本)

2.实现思路

</>复制代码

  1. (1)在body中将需要生成PDF的HTML复制一份,切记:如果元素中含有ID,则必须重新给定
  2. (2)将新的元素设置为position:absolute; 脱离文档流,因为处于文档流中被浏览器遮挡的部分不会生成PDF。
  3. (3)利用html2canvas.js将新的元素生成图片
  4. (4)利用jspdf.min.js将图片生成PDF文件并保存到本地。

3.实现代码

</>复制代码

  1. (1)HTML代码
  2. /*将要生成PDF的HTML代码*/
  3. ………………………………
  4. (2)JS代码
  5. /*复制元素,注意ID*/
  6. $("body").append("
    …………………………………………………………
    ");
  7. /*设置新元素样式*/
  8. $("#pdf1").css({
  9. "background-color": "#fff",
  10. "position": "absolute",
  11. "top": "0px",
  12. "z-index": "-1",
  13. "height": $("#pdf").height()
  14. });
  15. /*html2canvas生成图片,jspdf生成PDF文件*/
  16. html2canvas($("#pdf1"), {
  17. background: "#fff",
  18. allowTaint: true,
  19. taintTest: false,
  20. onrendered:function(canvas) {
  21. var contentWidth = canvas.width;
  22. var contentHeight = canvas.height;
  23. var pageHeight = contentWidth / 592.28 * 841.89;
  24. var leftHeight = contentHeight;
  25. var position = 0;
  26. var imgWidth = 595.28;
  27. var imgHeight = 592.28/contentWidth * contentHeight;
  28. var pageData = canvas.toDataURL("image/jpeg", 1.0);
  29. var img = new Image();
  30. img.src = pageData;
  31. var pdf = new jsPDF("p", "pt", "a4");
  32. img.onload = function() {
  33. if (leftHeight < pageHeight) {
  34. pdf.addImage(pageData, "JPEG", 0, 0, imgWidth, imgHeight );
  35. } else {
  36. while(leftHeight > 0) {
  37. pdf.addImage(pageData, "JPEG", 0, position, imgWidth, imgHeight)
  38. leftHeight -= pageHeight;
  39. position -= 841.89;
  40. if(leftHeight > 0) {
  41. pdf.addPage();
  42. }
  43. }
  44. }
  45. pdf.save("report_pdf_" + new Date().getTime() + ".pdf");
  46. $("#pdf1").remove();
  47. }
  48. },
  49. })

以上为笔者在项目中的部分核心代码,如有问题,欢迎指正。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/93007.html

相关文章

  • vue导出html、word和pdf

    摘要:导出的页面组件如下导出方法获取要导出的组件页面的把它设置成变量一文本并通过导出获取要导出组件页面的的标签代码,通过获取,也可以通过获得构造页面,并使用构造一个文件流并下载,如下具体代码如下的简历获取另外一种方式迅聘选才导出 导出的页面组件如下: 1、导出html 方法:1)获取要导出的组件页面的css把它设置成js变量一文本并通过export导...

    malakashi 评论0 收藏0
  • 前端实现htmlpdf方法总结

    摘要:比上面的稍微好点,支持了一些方面的东西,具体看这个中文配置参数评价这种方法前端实现,灵活简单,而且在页面还原上是很好的,生成的过程不需要自己操心,页面样式还可控,可以说是非常不错的。 最近要搞前端html转pdf的功能。折腾了两天,略有所收,踩了一些坑,所以做些记录,为后来的兄弟做些提示,也算是回馈社区。经过一番调(sou)研(suo)发现html导出pdf一般有这几种方式,各有各有优...

    Heier 评论0 收藏0
  • 前端实现htmlpdf方法总结

    摘要:比上面的稍微好点,支持了一些方面的东西,具体看这个中文配置参数评价这种方法前端实现,灵活简单,而且在页面还原上是很好的,生成的过程不需要自己操心,页面样式还可控,可以说是非常不错的。 最近要搞前端html转pdf的功能。折腾了两天,略有所收,踩了一些坑,所以做些记录,为后来的兄弟做些提示,也算是回馈社区。经过一番调(sou)研(suo)发现html导出pdf一般有这几种方式,各有各有优...

    gekylin 评论0 收藏0
  • 前端实现htmlpdf方法总结

    摘要:比上面的稍微好点,支持了一些方面的东西,具体看这个中文配置参数评价这种方法前端实现,灵活简单,而且在页面还原上是很好的,生成的过程不需要自己操心,页面样式还可控,可以说是非常不错的。 最近要搞前端html转pdf的功能。折腾了两天,略有所收,踩了一些坑,所以做些记录,为后来的兄弟做些提示,也算是回馈社区。经过一番调(sou)研(suo)发现html导出pdf一般有这几种方式,各有各有优...

    yvonne 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<