SpringBoot集成iReport5.6,并在前端显示PDF报表-程序员宅基地

技术标签: spring  spring boot  

因为工作要求我接触到了报表这个东西,网络上大部分教程都较为杂乱,我在这里也分享一下我所积累的经验,希望可以帮助到更多的人。

首先这个你想使用IReport5.6需要java7jre,这是第一步,这里我就不放下载链接了,百度一下就可以找到。

然后这个是iReport5.6的官方下载地址: iReport Designer | Jaspersoft Community

接下来我们开始今天的正题,如何在前端显示我们的报表

首先先在pom.xml文件中引入我们的依赖

        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports</artifactId>
            <version>6.0.0</version>
        </dependency>

        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>2.2.2</version>
        </dependency>
        <!--        解决前端显示不了中文,或字体报错-->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>

 然后创建一个工具类,这是我工具类中的方法

 /**
     *  前端预览pdf格式报表
     * @param finame jasper文件路径 jasper文件统一存放在resources下的jasper文件夹下 必传
     * @param fiJrxmls jrxml文件路径 jrxml件统一存放在resources下的jrxmls文件夹下 必传
     * @param dataList 参数 必传
     */
    public static HttpEntity<byte[]> getReportByParam(
            String finame,
            String fiJrxmls,
            List<HashMap> dataList) throws SQLException, ClassNotFoundException, JRException, IOException {

        File compiledFile = ResourceUtils.getFile(finame);
        JasperReport jr;
        if (compiledFile.exists()) {
            jr = (JasperReport) JRLoader.loadObject(compiledFile);
        } else {
            InputStream inputStream = IreportUtils.class.getResourceAsStream(fiJrxmls);
            JasperDesign jd = JRXmlLoader.load(inputStream);
            jr = (JasperCompileManager.compileReport(jd));
            JRSaver.saveObject(jr, finame);
        }

        JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(dataList,false);
        JasperPrint jasperPrint = JasperFillManager.fillReport(jr, new HashMap<>(), dataSource);

        final byte[] data = JasperExportManager.exportReportToPdf(jasperPrint);

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_PDF);
        headers.set(HttpHeaders.CONTENT_DISPOSITION, "inline: filename=demo.pdf");
        headers.setContentLength(data.length);
        return new HttpEntity<>(data, headers);
    }

在这里我所参考的博客是: ​​​​​​Springboot+jasperReport+ireport5.6(模板工具)+vue+pdf.js实现pdf文件流在前端预览打印_孔川的博客-程序员宅基地

然后在我们的resources下放入我们使用iReport所生成的jrxml文件和jasper文件

随后在我们的controller层添加一个接口

这里因为项目原因直接把SQL写在了controller层

@ResponseBody
    @GetMapping("getPDF")
    public HttpEntity<byte[]> getReportByParam(String Date) throws SQLException, ClassNotFoundException, JRException, IOException {

        String sql = String.format(这里是SQL语句);
        //这里是调用service层方法获取数据
        List<HashMap> dataList = queryService.getData(sql,null,null);

        //相对路径找到我们需要的文件
        String finame="classpath:jaspers/Roleplus.jasper";
//        String finame="D:\\ireport\\iReport-5.6.0\\ireport\\libs\\Role.jasper";
        String fiJrxmls = "classpath:jrxmls/Roleplus.jrxml";
//        String fiJrxmls = "D:\\ireport\\iReport-5.6.0\\ireport\\libs\\Role.jrxml";

        //调用工具类中的方法
        return IreportUtils.getReportByParam(finame,fiJrxmls,dataList);
    }

在添加上这个方法就可以直接请求在前端查看我们做的报表了,我用的浏览器是Edge,可以自动解析PDF数据预览,如果你是要适配别的浏览器可以使用PDF.js

然后再说说我遇到的小坑

在我们前面引入的net.sf.jasperreports这个包中有一个阴间包0.9.7.309-JS-3,为什么说这个是阴间包呢,因为这个包maven下载不到,我在maven仓库中也没有搜到(可能是我太菜),这个包会导致我们在打包的时候报错,现在我也没有很好的解决方法,如果你看到我的博客并且也遇到了这个问题可以加我的QQ:3411460259,我会给你提供一个比较暴力的笨办法

最后呢,这是一个入行不到一年的小白写的第一篇博客,写的不是很好,希望大家多多包涵,如有问题也欢迎指出

这里是成功之后的效果预览(这里因为我没有给数据,所以会是null和无数据)

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/SPRINGBOOTWANG/article/details/125404763

智能推荐

jsp存储textarea到数据中换行问题_weixin_30535913的博客-程序员宅基地

1:&lt;% String demo=request.getParameter("demo"); int index=0; while((index=demo.indexOf("\n"))!=-1) demo=demo.substring(0,index)+"&lt;br&gt;"+demo.substring(index+1); out.print(demo); %...

easyui datagrid nowrap 使用方法_weixin_30376163的博客-程序员宅基地

经过我多次试验,nowrap如果为true,则在同一行中显示数据。设置为true可以提高加载性能。 这种形式才能生效,&lt;script type="text/javascript"&gt; $('#tt').datagrid({ nowrap: false }); &lt;/script&gt;无效&lt;th data-options="f...

selenium python 时间控件的输入问题_weixin_30438813的博客-程序员宅基地

对于时间的选择问题,查到的大部分为两种情况:1.存在readonly属性的2.没有readonly属性的可直接赋值send_keys()测试用例中刚好是没有readonly属性的且定位不到弹窗(通过查资料可知道,直接给时间控件input属性赋值是最快捷的方法)一开始都是奔着情况二去处理的,但一直运行不成功,总是在赋值的地方出错,反复确认了不存在iFrame...

jsonObject.getString()解析任意字段均可强转为string 及与jsonObject.optString()的区别_未名who的博客-程序员宅基地

在项目中一直用String s = jsonObject.getString( "s" )来获取字段,突然有一天我们安卓组同事跟后端说,让他们传json数据全部用string类型,否则如果一会传int一会又是string的话我们安卓端解析容易报类型转换异常。咋一听感觉好像有一定的道理,于是我就把获取的json字符串打印出来,一看确实有的是int有的string。然而奇怪的是,我所有的项目都是用

1.Float浮动和清除浮动_weixin_30405421的博客-程序员宅基地

1.Float的介绍float 属性定义元素在哪个方向浮动。以往这个属性总应用于图像,使文本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动。浮动元素会生成一个块级框,而不论它本身是何种元素。如果浮动非替换元素,则要指定一个明确的宽度;否则,它们会尽可能地窄(塌陷的产生)。注:假如在一行之上只有极少的空间可供浮动元素,那么这个元素会跳至下一行,这个过程会持续到某一行拥有足够的空间为止。...

java spring框架 注解_史上最全的java spring注解_weixin_29699433的博客-程序员宅基地

史上最全的java spring注解,没有之一注解是个好东西,但好东西我们也是看见过,整理过,理解过,用过才知道好。不求我们每个都记住,但求保有印象,在需要的时候能提取出来再查找相关资料,平时工作就不会显得那么被动了。[email protected]注解该类等价 与XML中配置beans,相当于Ioc容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean,与xml中配...

随便推点

luogu1048采药_weixin_30341735的博客-程序员宅基地

辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”如果你是辰辰,你...

底部菜单栏(三)Fragment+FragmentTabHost实现仿新浪微博底部菜单栏_weixin_30287169的博客-程序员宅基地

一、实现效果图二、项目工程结构三、详细代码编写1、主tab布局界面,main_tab_layout:双击代码全选1234567891011121314151617181920212223242526&lt;?xm...

图片操作和视频操作核心类_weixin_30302609的博客-程序员宅基地

废话不多说直接上精华。下面是图片操作的一些关键代码:图片操作类需求是得到一些图片的信息存入数据库,其中图片的宽高可通过system.Drawing.Image查看。一切从FileInfo开始OpenFileDialog open = new OpenFileDialog(); if ((bool)open.ShowDialog()) ...

使用OpenSSL命令从cer文件中导出rsa_public_key.pem文件_asdfgasfg的博客-程序员宅基地

openssl x509 -inform der -in certificate.cer -pubkey -noout &amp;gt; rsa_public_key.pemOpenSSL手册

S2-019、S2-020_weixin_30564901的博客-程序员宅基地

前言 “Struts2系列起始篇”是我整各系列的核心,希望大家能花些时间先看看。正文 我发现关于一些早期的Struts2的漏洞,网上的分析文章并不多,不知道是不是我打开浏览器的方式不对,唯一看到的两篇文章也仅有poc,没有细节分析。于是我在官方上看了下漏洞详情,如下: 大概意思是动态方法调用开启了会导致安全问题,给出的信息太少了,于是我又看了下网上的po...

推荐文章

热门文章

相关标签