我的情况是,当我无法通过jasper文件中的查询检索任何内容时,仍会生成报告。

我正在使用这一行代码来生成报告。

ByteArrayOutputStream baos = new ByteArrayOutputStream();

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReportStream, params, jdbcConnection);
long start = System.currentTimeMillis();
Exporter jrExporter = getJRExporter(format, jasperPrint, baos);
jrExporter.exportReport();
bytes = baos.toByteArray();


有没有一种方法可以使用导出器对象检测我的报告是否为空?
我尝试使用byteArray验证null,然后在生成pdf格式时将其转换为String。

但是我无法轻易检查byteArray是否为null,因为尽管我的查询未返回任何结果,但它仍会产生以下输出:

%PDF-1.4
%����
1 0 obj <</Length 45/Filter/FlateDecode>>stream
x�3P0T�5T0P0�4�ɹ\�\N!\�f
���
!)\�!\�\\

最佳答案

jasperReport标记whenNoDataType="NoPages"上设置或删除whenNoDataType属性(默认为“ NoPages”)

检查JasperPrint中有多少页,如果为0,则表示NoData

    JasperPrint print = JasperFillManager.fillReport(jasperReportStream, params, jdbcConnection);
    List<JRPrintPage> pages = print.getPages();
    if (pages.size()==0){
            //No pages, do not export instead do other stuff
    }

10-06 09:31