欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

bootstrap table和tableExport导出支持中文的Excel和pdf等表格

程序员文章站 2022-07-15 10:52:26
...

前言

  • 由于最近项目有一个导出表格为pdf格式,所以就做了这个功能。由于项目的表格是基于bootstrap和bootstrap table实现的,相对于easyUI来说它的优点是更方便,更好兼容。
  • 从代码可以发现bootstrap table本身是没有实现表格的导出的,需要扩展插件tableExport,扩展的tableExport在导出csv,txt,sql,json等格式的时候能很好的支持中文,不过需要导入相应js文件(本文会解决),但是对于pdf格式的就不支持中文了,如何解决是本文的中点。

    前提

  • 首先得下载几个插件:

jquery下载
bootstrap下载
bootstrap table下载
tableExport下载

注意

  • 由于bootstrap和其扩展的插件都是基于jquery来实现的,所以在使用这些插件的时候必须先把jquery引入。
  • 对于版本有要求,bootstrap对jquery的版本有依赖,在bootstrap的bower.json 文件中列出了 bootstrap 所支持的 jquery 版本,请对应下载jquery版本。
  • 不能把单个的css、js文件提出来放在一个文件中因为有的文件有关联,提出来就导致某些功能用不了。

步骤 下载的文件整理:

  • 新建文件bootstrap_above;
  • 将下载的tableExport.jquery.plugin-master文件重命名为tableExport;
  • 将重命名的tableExport和下载的bootstrap、bootstrap-table-develop、jquery-1.9.1文件放入bootstrap_above文件中。
  • 修改文件,tableExport默认是使用jspdf来实现导出pdf的,但是jspdf不支持中文,所以我们改用pdfmake方式,但是必须自定义字体生成vfs_fonts.js,博主已经自定义好需要的请自己下载。将vfs_fonts.js文件替换掉bootstrap_above\tableExport\libs\pdfmake目录下的vfs_fonts.js文件。
  • 将tableExport.js文件的代码
pdfmake: {enabled: false,                               // true: use pdfmake instead of jspdf and jspdf-autotable (experimental)
                  docDefinition: {pageOrientation: 'portrait',  // 'portrait' or 'landscape'
                                  defaultStyle: {font: 'Roboto' // default is 'Roboto', for arabic font set this option to 'Mirza' and include mirza_fonts.js
                                                }
                                 },
                  fonts: {}
                 }, 

修改为

pdfmake: {enabled: true},
  • 将tableExport.js文件的代码
          var docDefinition = { content: [ {
                                  table: {
                                    headerRows: $hrows.length,
                                    widths: widths,
                                    body: body
                                  }
                               }]};

          $.extend(true, docDefinition, defaults.pdfmake.docDefinition);

          pdfMake.fonts = {
            Roboto: {
              normal: 'Roboto-Regular.ttf',
              bold: 'Roboto-Medium.ttf',
              italics: 'Roboto-Italic.ttf',
              bolditalics: 'Roboto-MediumItalic.ttf'
            }
          };
            $.extend(true, pdfMake.fonts, defaults.pdfmake.fonts);

替换为

pdfMake.fonts = {
                Roboto: {
                    normal: 'Roboto-Regular.ttf',
                    bold: 'Roboto-Medium.ttf',
                    italics: 'Roboto-Italic.ttf',
                    bolditalics: 'Roboto-Italic.ttf'
                },
                微软雅黑: {
                    normal: 'msyh.ttf',
                    bold: 'msyhbd.ttf',
                    italics: 'msyh.ttf',
                    bolditalics: 'msyhbd.ttf'
                }
            };

            $.extend(true, pdfMake.fonts, defaults.pdfmake.fonts);
            var docDefinition = {
                pageOrientation: 'landscape',
                content: [
                    {
                        table: {
                            headerRows: $hrows.length,
                            widths: widths,
                            body: body
                        }
                    }
                ],
                defaultStyle: {
                    font: '微软雅黑'
                }
            };
            $.extend(true, docDefinition, defaults.pdfmake.docDefinition);

至此前期工作就做好了,接下来就是使用了。

html代码(注意引用js的顺序,部分顺序不能改变)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <link rel="icon" href="img/favicon.ico">
        <title>Bootstrap 模板</title>
        <!--
            描述:样式导入
        -->
        <link rel="stylesheet" href="js/bootstrap_above/bootstrap/css/bootstrap.min.css" />
        <link rel="stylesheet" href="js/bootstrap_above/bootstrap-table-develop/dist/bootstrap-table.css"/>

        <!--
            描述:js导入,注意顺序,jquery必须引入
            bootstrap-table-zh-CN.js为表格汉化的文件
            FileSaver.min.js等是关联引用文件
        -->
        <script src="js/bootstrap_above/jquery-1.9.1/jquery.min.js"></script>
        <script src="js/bootstrap_above/bootstrap/js/bootstrap.min.js"></script>
        <script type="text/javascript" src="js/bootstrap_above/bootstrap-table-develop/dist/bootstrap-table.js"></script>
        <script type="text/javascript" src="js/bootstrap_above/bootstrap-table-develop/dist/locale/bootstrap-table-zh-CN.js"></script>
        <script type="text/javascript" src="js/bootstrap_above/bootstrap-table-develop/dist/extensions/export/bootstrap-table-export.js"></script>

        <script src="js/bootstrap_above/tableExport/libs/pdfmake/pdfmake.min.js"></script>
        <script src="js/bootstrap_above/tableExport/libs/pdfmake/vfs_fonts.js"></script>
        <script type="text/javascript" src="js/bootstrap_above/tableExport/libs/FileSaver/FileSaver.min.js"></script>
        <script type="text/javascript" src="js/bootstrap_above/tableExport/libs/jsPDF/jspdf.min.js"></script>
        <script type="text/javascript" src="js/bootstrap_above/tableExport/libs/jsPDF-AutoTable/jspdf.plugin.autotable.js"></script>
        <script type="text/javascript" src="js/bootstrap_above/tableExport/tableExport.js"></script>

        <script src="js/table.js"></script>
    </head>
    <body>
        <table class="table-responsive" id="db_dependences">

        </table>
    </body>
</html>

js块table.js代码


$(function () {
    $('#db_dependences').bootstrapTable({
        method:'POST',
        dataType:'json',
        contentType: "application/x-www-form-urlencoded",
        cache: false,
        striped: true,                              //是否显示行间隔色
        sidePagination: "client",           //分页方式:client客户端分页,server服务端分页(*)
        showColumns:true,
        pagination:true,
        minimumCountColumns:2,
        pageNumber:1,                       //初始化加载第一页,默认第一页
        pageSize: 20,                       //每页的记录行数(*)
        pageList: [10, 25, 50, 100],        //可供选择的每页的行数(*)
        uniqueId: "id",                     //每一行的唯一标识,一般为主键列
        showExport: true,                    
        exportDataType: 'all',
        exportTypes:[ 'csv', 'txt', 'sql', 'doc', 'excel', 'xlsx', 'pdf'],  //导出文件类型
        columns: [{
            field: 'id',
            title: 'Item ID'
        }, {
            field: 'name',
            title: 'Item Name'
        }, {
            field: 'price',
            title: 'Item Price'
        }],
        data: [{
            id: 1,
            name: '项目 1',
            price: '价格$1'
        }, {
            id: 2,
            name: '项目 2',
            price: '价格$2'
        }]
    });
});

结果不多说有图才有真相

bootstrap table和tableExport导出支持中文的Excel和pdf等表格
bootstrap table和tableExport导出支持中文的Excel和pdf等表格
bootstrap table和tableExport导出支持中文的Excel和pdf等表格

源码下载

下载链接:ExportPDF_ch
注:本文为原创,转载请注明出处。