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

1.需要引入的文件

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

2.实现思路

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

3.实现代码

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

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

将HTML页面转换为PDF文件并导出的更多相关文章

  1. Office系列---将Office文件(Word、PPT、Excel)转换为PDF文件,提取Office文件(Word、PPT)中的所有图片

    将Office文件转换为PDF文件,提取Office文件中的所有图片 1.Office系列---将Office文件(Word.PPT.Excel)转换为PDF文件 1.1 基于Office实现的解决方 ...

  2. Office系列(1)---将Office文件(Word、PPT、Excel)转换为PDF文件

    需求: 将Office文件作为文章并在网页上预览,主要为(Word.PPT.Excel)3种类型文件. 研究了一下,找到了两种解决方案 直接调用微软的在线预览功能实现(预览前提:预览资源必须可以直接通 ...

  3. vue实现word,pdf文件的导出功能

    vue实现word或pdf文档导出的功能,我的项目是:后端返回一个文档流(下图),然后前端对文档流做处理进行下载,代码如下: import axios from 'axios'; axios.get( ...

  4. vue项目中使用Lodop实现批量打印html页面和pdf文件

    1.Lodop是什么? Lodop(标音:劳道谱,俗称:露肚皮)是专业WEB控件,用它既可裁剪输出页面内容,又可用程序代码直接实现复杂打印.控件功能强大,却简单易用,所有调用如同JavaScript扩 ...

  5. 如何将知网下载的caj文件转换为pdf文件

    一.问题描述: 最近在知网搜索论文的时候,经常遇到有的论文没有pdf文件的情况,但不得不吐槽我觉得知网做的阅读器确实是有点烂.所以想将caj文件转化为pdf文件,找到了一个比较好的方法,所以希望记录一 ...

  6. Java 使用 jacob 将 word 文档转换为 pdf 文件

    网上查询了许许多多的博客,说利用 poi.iText.Jsoup.jdoctopdf.使用 jodconverter 来调用 openOffice 的服务来转换等等,我尝试了很多种,但要么显示不完全, ...

  7. openoffice启动服务并将office文件转换为pdf文件

    1.首先下载最新版的openoffice工具,安装完成之后安装服务,, win+r打开命令提示符 输入cmd,cd C:\Program Files (x86)\OpenOffice 4\progra ...

  8. JS导出页面为PDF文件,该如何操作?来看一眼就明白啦!

    1.资源文件或依赖 <script type="text/javascript" src="./js/canvg2.js"></script& ...

  9. DEV word文档转换为pdf文件

    引用aspose.net控件2.0. docement doc=new document(文件路径和名称); doc.save(输出路径\file.pdf);

随机推荐

  1. django-admin常用总结

    django-admin常用总结 1.modelAdmin 1.1 list_display:显示列表. 1.2 search_fields:可被搜索的字段. 1.3 list_per_page:显示 ...

  2. JZ-051-构建乘积数组

    构建乘积数组 题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]A[1]...A[i-1]A[i+1]...A[n-1]. ...

  3. 矩池云助力科研算力免费上"云",让 AI 教学简单起来

    矩池云是一个专业的国内深度学习云平台,拥有着良好的深度学习云端训练体验,和高性价比的GPU集群资源.而且对同学们比较友好,会经常做一些大折扣的活动,最近双十一,全场所有的RTX 2070.Platin ...

  4. Laravel自定义错误提示,自定义异常类提示,自定义错误返回信息,自定义错误页面

    方法一 新增CustomException.php文件 App\Exceptions\CustomException.php <?php namespace App\Exceptions; us ...

  5. 小程序WXS 模块

    WXS(WeiXin Script)是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构 WXS中定义的函数可以在wxml文件中使用,可以用它来当过滤器使用 WXS以.wxs扩展名结尾,文件中 ...

  6. java高并发之ConcurrentSkipListMap的那些事

    注意:本文内容基于JDK11,不同版本会有差异 ConcurrentSkipListMap的结构 ConcurrentSkipListMap是以链表(自然排序)的形式进行数据存储的.即在类中通过定义N ...

  7. ArcGIS热点分析

    许多论文中一般会有热点分析图,ArcGIS中提供了热点分析的功能. 先看下描述:给定一组加权要素,使用 Getis-Ord Gi* 统计识别具有统计显著性的热点和冷点. 其实非常简单,今天博主就跟大家 ...

  8. Kettle错误记录之couldn't open file XXX

    业务背景: 简单的TXT文件入库逻辑 组件: 文件文本输入,表输出 具体BUG: 这里报错是无法打开文件,在我尝试了多个思路后,最终发现了问题所在. 因为使用的txt文件的格式是Unix的,而我的文本 ...

  9. Reverse Shell Cheat Sheet

    Reverse Shell Cheat Sheet If you're lucky enough to find a command execution vulnerability during a ...

  10. [源码解析] TensorFlow 分布式环境(6) --- Master 动态逻辑

    [源码解析] TensorFlow 分布式环境(6) --- Master 动态逻辑 目录 [源码解析] TensorFlow 分布式环境(6) --- Master 动态逻辑 1. GrpcSess ...