zoukankan      html  css  js  c++  java
  • 通过前端js将页面表格导出为PDF(一)

    •   前言

      最近工作太忙了,要同时用django重构两个系统,前后端都是我一个人写,前端要设计大量的表单,后端要处理大量的数据,身心俱疲啊!周末都没空,有半个月没有写博客了,今天没心情加班,腾出时间写写这半个月积累的技术经验。

    一、导出pdf

      因为开发的系统是服务于酒店的,需要定期和酒店对账,所以要将表格导出为execl表格,这要求简单,在前端写写js代码就行了;后来又改需求,execl不行,会被人为改动,要导出为pdf,还要每页加上公司的logo和其他乱七八糟的东西;没办法,只能去github上看看有没有好的第三方插件了,还真让我给找到了,这就是本文的男主和女主:jspdfhtml2canvas;接下来就让我们运用这两个库导出我们想要的PDF报表。

      首先当然是下载然后引入这两个js文件了,因为导出pdf的方式是先将我们选择的DOM包含的内容通过html2canvas渲染为canvas image;然后再通过jspdf将canvas导出为pdf;因为是直接通过浏览器完成的,所以有点不是很清晰。

    <script src="add/pdf/jquery.js"></script>
    <script src="add/pdf/jspdf.debug.js"></script>
    <script src="add/pdf/html2canvas.min.js"></script>
    <script src="add/pdf/exportpdf.js"></script>

    exportpdf.js

    // 获取本页表格中最后一行是第几行(对不同高度的表格进行不同的处理)
    var last_counts = $('.counts:last').text();
    
    //监听pdf导出按键
    $('#exportpdf').click(function () {
        // 将 id 为 contents 的 div 渲染成 canvas
        html2canvas(document.getElementById("contents"), {
            // 渲染完成时调用,获得 canvas
            onrendered: function(canvas) {
                // 从 canvas 提取图片数据
                var imgData = canvas.toDataURL('image/jpeg');
           
           // 因为我要在每页都加上特定的图片,所以要先将图片转化为base64格式(可以参考这个网站:http://tool.css-js.com/base64.html
                var img1_base = '~';
                var img2_base = '~';
                var img3_base = '~';
    
                //初始化pdf,设置相应格式(单位为pt,导出a4纸的大小)
                var doc = new jsPDF("p", "pt", "a4");
    
                //图片的位置和尺寸(图片,left,top,width,high)
                doc.addImage(img1_base, 10, 5, 90, 50);
                doc.addImage(img2_base, 450, 5, 130, 50);
    
           // 初始导出的页面为270(根据引入的图片和每行表格的高度设置)
                var img_high = 270;
                for (var i=1; i<last_counts; i++) {
             // 然后每增加一行加20的高(因为我的表格是分页的,每页最多26行,所以最高为750)
                    img_high += 20
                }
                doc.addImage(imgData, 10, 65, 580, img_high);
           // 页尾再加上一个图片
                doc.addImage(img3_base, 450, 780, 120, 40);
                //输出保存命名为bill的pdf
                doc.save('bill.pdf');
            },
         // 导出的pdf默认背景颜色为黑色,所以要设置颜色为白(根据自己的需求设置)
            background: '#FFF'
        })
    });        
  • 相关阅读:
    MAVEN整理(乘国庆还有时间,停下来整理一下)
    Hadoop Browse the filesystem 无效处理
    分页实现,类似博客园首页的分页
    Hive权限控制和超级管理员的实现
    缓存淘汰算法
    在线制图
    MySQL的Grant命令
    windows10上安装mysql(详细步骤)
    用Redis轻松实现秒杀系统
    redis 学习
  • 原文地址:https://www.cnblogs.com/tk2049jq/p/7230947.html
Copyright © 2011-2022 走看看