使用Javascript打印输出

教学视频

概述

通过引用报表中的一个Javascript文件,调用该文件中的相关方法,实现报表的预览、打印和导出功能。

引用Javascript文件

Javascript文件URL格式如下:

http[s]://host[:port]/[context-path]/baskserver/res/baskreport/js/view/BaskReport.bundle.js

在我们的HTML文件中通过上面的URL引入BaskReport中提供的名为BaskReport.bundle.js的Javascript文件后,接下来就可以在自己的Javascript代码中通过Javascript调用实现特定报表的预览、打印和导出功能。

使用Javascript调用报表

引入BaskReport.bundle.js文件后,当前的HTML文件中就可以直接使用BaskReport这个Javascript对象,这个对象中提供的方法如下表所示:

方法名 说明 语法
doPrint 直接打印报表文件 BaskReport.doPrint({id:reportFileId,[parameters:{name:value},] baseUrl:reportServerUrl});
doSilentPrint 2.1.1版本开始支持,将报表发送给BaskReport打印服务器,实现无预览打印或者叫静默打印,
BaskReport无预览静默打印详情点击此处了解
BaskReport.doSilentPrint({id:reportFileId,[parameters:{name:value},] baseUrl:reportServerUrl});
doMultiPrint 直接打印多个报表文件,
将多个报表文件合并在一个文件中打印输出
BaskReport.doMultiPrint({files:[ { id:reportFileId[,parameters:{name:value}] }, { id:reportFileId[,parameters:{name:value}] } ], baseUrl:reportServerUrl});
doPreview 新开窗口以HTML形式预览报表文件 BaskReport.doPreview({id:reportFileId, [parameters:{name:value},] baseUrl:reportServerUrl});
doExportWord 直接将报表文件以word形式导出 BaskReport.doExportWord({ id:reportFileId, [parameters:{name:value},] baseUrl:reportServerUrl});
doExportExcel 直接将报表文件以excel形式导出 BaskReport.doExportExcel({ id:reportFileId, [parameters:{name:value},] baseUrl:reportServerUrl});
doExportMultiExcel 导出多个报表文件,将多个报表文件放在一个Excel文件不同的Sheet页中导出。 BaskReport.doExportMultiExcel({ files:[ { id:reportFileId[,parameters:{name:value}] }, { id:reportFileId[,parameters:{name:value}] } ] baseUrl:reportServerUrl});
doExportPdf 直接将报表文件以pdf形式导出 BaskReport.doExportPdf({ id:reportFileId, [parameters:{name:value},] baseUrl:reportServerUrl});
doExportCsv 直接将报表文件以csv形式导出 BaskReport.doExportCsv({ id:reportFileId, [parameters:{name:value},] baseUrl:reportServerUrl});
doExportMultiPdf 直接导出多个报表文件,
将多个报表文件合并在一个pdf文件中导出
BaskReport.doExportMultiPdf({ files:[ { id:reportFileId[,parameters:{name:value}] }, { id:reportFileId[,parameters:{name:value}] } ] baseUrl:reportServerUrl});
doSave 调用目标iframe窗口中存在的报表填报页面里的保存功能,实现数据填报提交。
需要在当前页面中通过iframe嵌入填报页面,且需要为这个iframe指定ID值;
同时在调用这个方法时,还可以添加一个名为callback的参数用于指定保存成功后要执行的回调函数,
该函数入参只有一个,里面包含当前提交的数据(数据需要调用decodeURIComponent方法解码),文件ID等信息。
BaskReport.doSave({iframe:"iframeId"[,callback:function]})

上面的语法中,reportFileId表示具体的已发布的报表文件ID,parameters属于可选参数,baseUrl表示报表服务器的URL,比如:http://192.168.18.106:8080/baskserver-test

上面的方法中,需要注意的是访问的目标报表文件必须是已发布的,否则可能会出现访问不了的情况。 同时在访问报表文件时,还要保证访问的URL处理登录状态。如果当前报表引擎与应用集成在一起,那么登录不是问题,如果报表引擎与应用分别位于不同的系统当中,那么需要解决登录问题,具体可参考BaskServer平台中单点登录相关介绍。

参数说明

id

该参数用于指定报表文件的ID,id参数和code参数二选一

code

我们也可以通过报表的CODE参数访问它,该参数用于指定报表文件的CODE,id参数和code参数二选一

BaskReport.doPrint({
    code:reportFileCode,
    [parameters:{name:value},]
    baseUrl:reportServerUrl
});

name

在执行导出报表文件操作时,可以添加一个name参数用于指定报表导出后的文件名称,如果不加name参数,默认则采用目标报表名称为导出后的文件名(导出多个文件则采用第一个文件的文件名)。

parameters

报表参数,对应为报表设计器中的参数列表,该参数集合用JSON结构的数据声明,例如:

BaskReport.doPrint({
    code:reportFileCode,
    parameters:{deptId:"D11",sex:true},
    baseUrl:reportServerUrl
});

baseUrl

报表服务的URL

举例

下面的HTML中包含五个按钮,通过引用BaskReport.bundle.js文件,使用BaskReport对象提供的对应方法,实现打印单张报表、打印多张报表、预览HTML报表、导出Word以及导出多张报表到一个PDF文件的功能,JSP源码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>测试</title>
<script type="text/javascript" src="http://192.168.18.106:8080/baskserver-test/baskserver/res/baskreport/js/view/BaskReport.bundle.js"></script>
</head>
<body>
<button onClick="print()">打印单张报表</button>
<button onClick="multiprint()">打印多张报表</button>
<button onClick="preview()">预览HTML报表</button>
<button onClick="exportWord()">导出Word</button>
<button onClick="multiexport()">导出多张报表到一个PDF文件</button>
<script>
    var REPORT_BASE_URL = 'http://192.168.18.106:8080/baskserver-test';
    function print(){
        BaskReport.doPrint({
            id:2001,
            baseUrl:REPORT_BASE_URL
        });
    }
    function multiprint(){
        BaskReport.doMultiPrint({
            baseUrl:REPORT_BASE_URL,
            files:[
                {
                    id:2001
                },
                {
                    id:1501
                }
            ]
        });
    }
    function multiexport(){
        BaskReport.doExportMultiPdf({
            baseUrl:REPORT_BASE_URL,
            files:[
                {
                    id:2001
                },
                {
                    id:1501
                }
            ]
        });
    }
    function preview(){
        BaskReport.doPreview({
            baseUrl:REPORT_BASE_URL,
            id:1501
        });
    }
    function exportWord(){
        BaskReport.doExportWord({
            baseUrl:REPORT_BASE_URL,
            id:1501
        });
    }
</script>
</body>
</html>

上面的例子当中,通过REPORT_BASE_URL变量定义要操作的报表文件所在的应用地址,REPORT_BASE_URL的值为:http://192.168.18.106:8080/baskserver-test ,这里的baskserver-test为应用的contextpath,需要注意的是,如果我们的应用没有contextpath,那么REPORT_BASE_URL的值就应该为:http://192.168.18.106:8080。

预览效果如下图:

d

results matching ""

    No results matching ""