解决bootstrap table的export扩展模块利用tableExport导出pdf中文乱码问题

参考文章:

  1. https://blog.csdn.net/qq_34117170/article/details/72765646
  2. https://www.cnblogs.com/xrab/p/7210588.html
  3. https://www.npmjs.com/package/grunt-dump-dir
  4. https://www.cnblogs.com/s313139232/p/7545114.html

    bootstrap-table(1.12.1)中的export扩展模块默认使用jsPDF实现导出pdf,但是jsPDF会出现中文乱码问题。因此查阅一番资料,都提议使用pdfmake来实现pdf导出。但是pdfmake默认使用的字体js文件却又不支持中文。因此需要修改pdfmake源码来支持中文字体。具体做法就是编译新的vfs_fonts.js代替原来vfs_fonts.js文件引入到前端页面中。

    上述两个文章讲利用grunt或者glup来生成js。看了下文章然后打算亲自利用grunt来生成js文件。但按照文章1生成的方法来实现,发现里面还是漏了最重要的一步,也就是grunt执行所需要的Gruntfile.js、package.json。这两个东西都是通过grunt官方英文文档学习后,才知道要这两个文件。必须有这两个文件才能正确执行npm中gurnt命令。但是里面涉及一个grunt-dump-dir的依赖。然后问题来了,网上几乎没有这个依赖的操作说明,只查到文章3。然后自己摸索后,勉强写出来Gruntfile.js。但经过实际运行,不知为啥,执行成功后,在build目录下没有生成出js。百般尝试无奈放弃了手动生成js文件的念头。最后在不懈的查找下,找到了一个网址提供方正姚体的vfs_fonts.js(体积小,比微软雅黑要小)。

附上相关代码:

Gruntfile.js

module.exports = function(grunt) {

  // Project configuration.
  /*grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    uglify: {
      options: {
        banner: ''
      },
      build: {
        src: 'src/微软雅黑.ttf',
        dest: 'build/aa.js'
      }
	  
    }
  });

  // 加载包含 "uglify" 任务的插件。
  grunt.loadNpmTasks('grunt-contrib-uglify');

  // 默认被执行的任务列表。
  grunt.registerTask('default', ['uglify']);*/

  grunt.loadNpmTasks('grunt-dump-dir');
  
  grunt.registerTask('default', ['dump_dir']);
  
  grunt.initConfig({
  dump_dir: {
		options: {
		  'rootPath': 'src/'
		},
		files: {
		  'dest.js': [ 'src/*' ]
		},
	  }
	});
};

package.json

{
  "name": "my-project-name",
  "version": "0.1.0",
  "devDependencies": {
    "grunt": "^0.4.5",
    "grunt-contrib-jshint": "^0.10.0",
    "grunt-contrib-nodeunit": "~0.4.1",
    "grunt-contrib-uglify": "^0.5.1",
    "grunt-dump-dir": "^0.1.2"
  }
}

    在解决字体js文件后,就需要修改bootstrap-table中export.js和tableExport.js的源码了。

初始化js

$("#tableId").bootstrapTable({
    	method: "get", //使用get请求到服务器获取数据  
        url: "/xxx/listData", //获取数据的地址
        contentType:"application/json",
        dataType: "json",
        locale: "zh-US", 
        showExport: true,      	//【export配置】是否显示导出
        buttonsAlign:"right", 	//【export配置】按钮位置
        exportDataType: "all", 	//【export配置】导出数据类型, support: 'basic', 'all', 'selected'.
        exportTypes:['json', 'xml', 'png', 'csv', 'txt', 'doc', 'excel', 'pdf'], 
        						//【export配置】导出文件类型, 
					        	//support types: 'json', 'xml', 'png', 'csv', 'txt', 'sql', 'doc', 'excel', 'xlsx', 'pdf'.  
					        	//default: ['json', 'xml', 'csv', 'txt', 'sql', 'excel']
        exportOptions:{		  	//【export配置】导出设置
        	//separator: ',',
        	ignoreColumn: [7],   	 //忽略某一列的索引
            fileName: '数据列表',       //文件名称设置
            worksheetName: 'sheet1', //表格工作区名称
            tableName: '数据列表'//,
            //pdfFontSize:14,
            //pdfLeftMargin:20,
            //excelstyles: ['background-color', 'color', 'font-size', 'font-weight'],
            /* onMsoNumberFormat: function (cell, row, col) {
                var result = "";
                if (row > 0 && col == 0)
                    result = "\\@";
                return result;
            } */
        },
        //height: '100%',
        singleSelect: false, //单选框
        striped: true,  //表格显示条纹  
        pagination: true, //启动分页  
        pageSize: 10,  //每页显示的记录数  
        pageNumber:1, //当前第几页  
        pageList:[10, 20, 50, 100],//记录数可选列表
        sortable:true,//启动排序
        sortName:"name",
        sortOrder:"desc",
        search: true, //是否启用查询
        showColumns: true,  //显示下拉框勾选要显示的列  
        showRefresh: true,  //显示刷新按钮  
        showToggle:true,
        toolbar:"#toolbar",
        sidePagination: "client", //表示服务端请求
        columns: [
                {
                  	title: "名称",
                  	field: "name",
                  	width:"10%",
                  	sortable:true,
                 	order:"desc",
                 	cellStyle:{  
                        css:{"overflow":"hidden","text-overflow":"ellipsis","white-space":"nowrap"}//内容过长显示...
                    }
                }
            ]/*,
            //设置为undefined可以获取pageNumber,pageSize,searchText,sortName,sortOrder  
            //设置为limit可以获取limit, offset, search, sort, order  
            queryParamsType:"undefined",
            queryParams: function queryParams(params) {   //设置查询参数  
              var param = {    
                  pageNumber: params.pageNumber,    
                  pageSize: params.pageSize,  
                  sortOrder: params.sortOrder,
                  sortName: params.sortName,
                  searchText: $("#searchText").val()
              };    
              return param;                   
            } ,  
            onLoadSuccess : function() { //加载成功时执行  
				alert("加载成功");
			},
			onLoadError : function() { //加载失败时执行  
				alert("加载数据失败");
			} */
	});

bootstrap-table-export.js

doExport = function () {

                            if (!!that.options.exportFooter) {
                                var data = that.getData();
                                var $footerRow = that.$tableFooter.find("tr").first();

                                var footerData = { };
                                var footerHtml = [];

                                $.each($footerRow.children(), function (index, footerCell) {

                                    var footerCellHtml = $(footerCell).children(".th-inner").first().html();
                                    footerData[that.columns[index].field] = footerCellHtml == ' ' ? null : footerCellHtml;

                                    // grab footer cell text into cell index-based array
                                    footerHtml.push(footerCellHtml);
                                });

                                that.append(footerData);

                                var $lastTableRow = that.$body.children().last();

                                $.each($lastTableRow.children(), function (index, lastTableRowCell) {

                                    $(lastTableRowCell).html(footerHtml[index]);
                                });
                            }

                            //修改源码,将jsPdf,改为pdfMake支持中文
                            var openPdfMake = false;
                            if(type=="pdf"){
                            	openPdfMake = true;
                            }
                            that.$el.tableExport($.extend({}, that.options.exportOptions, {
                                type: type,
                                escape: false,
                                pdfmake:{enabled:openPdfMake}
                            }));

                            if (!!that.options.exportFooter) {
                                that.load(data);
                            }
                        };

tableExport.js

 pdfmake: {
        enabled:           false,       // true: use pdfmake instead of jspdf and jspdf-autotable (experimental)
        docDefinition: {
          pageOrientation: 'landscape',  // 'portrait' or 'landscape'
          defaultStyle: {
            //font:          'Roboto'     // Default is 'Roboto', for arabic font set this option to 'Mirza' and include mirza_fonts.js
            font:          'FZYTK'    //修改支持PDF中文处理
          }
        },
        fonts: {}
      },
var docDefinition = {
          content: [{
            table: {
              headerRows: $hrows.length,
              widths:     widths,
              body:       body
            }
          }],
          defaultStyle: {//修改支持PDF中文处理
              font: 'FZYTK'
          }
        };
pdfMake.fonts = {
          Roboto: {
            normal:      'Roboto-Regular.ttf',
            bold:        'Roboto-Medium.ttf',
            italics:     'Roboto-Italic.ttf',
            bolditalics: 'Roboto-MediumItalic.ttf'
          },
          FZYTK: {//修改支持PDF中文处理
            normal: 'FZYTK.TTF',
            bold: 'FZYTK.TTF',
            italics: 'FZYTK.TTF',
            bolditalics: 'FZYTK.TTF'
          }
        };

同时还遇到一个问题,window.URL.createObjectURL(data)报错。因此还需修改如下代码:

if ( typeof data === 'object' ) {
            window.URL = window.URL || window.webkitURL;
            //blobUrl = window.URL.createObjectURL(data);
            //修改源码错误
            var binaryData = [];
            binaryData.push(data);
            blobUrl = window.URL.createObjectURL(new Blob(binaryData, {type: "application/zip"}))
            DownloadLink.href = blobUrl;
          }
          else if ( header.toLowerCase().indexOf("base64,") >= 0 )
            DownloadLink.href = header + base64encode(data);
          else
            DownloadLink.href = header + encodeURIComponent(data);

PS:最后通过别人帮助下,下载了微软雅黑的js字体文件。都统一打包在以下的export模块资源文件中了,供大家参考。
https://download.csdn.net/download/envy_l/10510171

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: bootstrap-table-export是一个基于Bootstrap框架的表格插件,用于导出表格数据为不同格式的文件。 通过使用bootstrap-table-export插件,我们可以方便地将表格数据导出为Excel、CSV、JSON等格式的文件,以便于后续的数据分析、存档或分享。 bootstrap-table-export提供了一些简单易用的API,使得我们可以灵活地控制导出的文件格式、文件名、是否包含表头、是否仅导出当前页的数据等。 使用bootstrap-table-export,我们只需要在表格中添加相应的导出按钮,并绑定相应的事件,即可实现导出功能。对于需要导出的表格,还可以通过一些配置选项,对导出的数据进行进一步的筛选和格式化。 除了导出功能,bootstrap-table-export还支持一些其他的扩展功能,如自定义表格的样式、分页、搜索、排序等。可以帮助我们更好地展示和管理表格数据。 总的来说,bootstrap-table-export是一个非常方便实用的表格导出插件,能够帮助我们轻松地导出表格数据为不同格式的文件,提高了数据的利用价值和效率。 ### 回答2: bootstrap-table-export是一款基于Bootstrap框架的表格导出插件。该插件可以让我们方便地将Bootstrap表格中的数据导出为Excel、PDF、CSV等常见的文件格式,以便进行保存或进一步处理。 首先,使用bootstrap-table-export插件可以很方便地实现表格数据的导出功能,无需手动编写复杂的导出代码。只需在Bootstrap表格上添加相应的配置选项,即可实现点击按钮或菜单即可导出表格数据。 其次,bootstrap-table-export支持导出多种常见的文件格式。无论是Excel、PDF还是CSV文件,我们都可以选择导出我们需要的格式。这样在对数据进行保存或者与其他软件进行交互时,更加灵活、方便。 此外,bootstrap-table-export插件提供了丰富的配置选项,可以满足不同的导出需求。我们可以根据自己的需要设置导出的文件名、导出的表头、文件格式等等。还可以对导出文件的样式进行自定义,使得导出的文件与我们的需求更加匹配。 总之,bootstrap-table-export是一款功能强大且易于使用的表格导出插件。它可以让我们在使用Bootstrap表格时,轻松实现表格数据的导出功能,并通过提供多种文件格式和丰富的配置选项,满足不同需求,方便我们对数据进行保存或进一步处理。 ### 回答3: bootstrap-table-export是一个基于Bootstrap框架开发的表格插件,用于将数据表格导出为不同格式的文件,如Excel、CSV和PDF等。它提供了一种简便的方式来导出数据,方便用户进行数据的分析和处理。 使用bootstrap-table-export非常简单,只需要在HTML中引入必要的CSS和JavaScript文件,然后在表格上添加相应的类和属性即可。插件会自动将表格转换为可导出的格式,并提供下载或在线预览的功能。 该插件提供了丰富的配置选项,可以根据自己的需求进行定制,如选择导出的文件类型、设置导出文件的名称、隐藏不需要导出的列等。此外,它还支持导出选中的行、当前页的数据或者全部数据,使得导出更加灵活可控。 另外,bootstrap-table-export还支持自定义导出按钮的样式和位置,方便用户能够灵活的控制导出功能的展示形式。同时,它还提供了一些回调函数用于对导出过程进行处理,如在导出前进行数据格式的转换、导出完成后进行一些操作等。 总之,bootstrap-table-export是一个功能强大、易于使用的数据表格导出插件,给用户提供了便捷的导出数据的方式,使得数据分析和处理变得更加高效和方便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值