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

iReport(模版) 与Jasper(数据填充)生成pdf文档

程序员文章站 2022-12-01 19:50:41
本文主要介绍iReport软件生成报表模板使用Jasper进行数据填充并生成pdf文档的实现过程。 ......

  报表模板生成软件:iReport 、 润乾、水晶。 

一、Jaspersoft iReport Desiginer 5.60 的使用

  1、软件jar包的下载地址与配置

  百度云盘下载链接: https://pan.baidu.com/s/1Ln9ewKMhYuau1bG9EgdUNQ  密码:cspl

  此软件最高仅支持1.7版本JDK,如果是1.8版本JDK,需要安装1.7以下的JDK,然后修改配置文件

  配置文件位置 : 安装目录\iReport-5.6.0\etc\ireport.conf,增加以下配置

jdkhome="C:\Program Files\Java\jdk1.7.0_80"

  2、创建模版

iReport(模版) 与Jasper(数据填充)生成pdf文档

iReport(模版) 与Jasper(数据填充)生成pdf文档

iReport(模版) 与Jasper(数据填充)生成pdf文档

如果需要删除不需要的区域,右键选中该区域,然后选择Delete Band

iReport(模版) 与Jasper(数据填充)生成pdf文档

以下三个区域为必须

iReport(模版) 与Jasper(数据填充)生成pdf文档

如需添加文本控件,选择下图中的Static Text

iReport(模版) 与Jasper(数据填充)生成pdf文档

如果控件中有中文,需要添加支持中文的iTextAsainJAR,按照下图所示进行配置

 iReport(模版) 与Jasper(数据填充)生成pdf文档

iReport(模版) 与Jasper(数据填充)生成pdf文档

iReport(模版) 与Jasper(数据填充)生成pdf文档

指定字体和属性设置,所有使用中文的控件,都必须按照下图所示进行配置.

iReport(模版) 与Jasper(数据填充)生成pdf文档

创建数据源,如果连接Oracle数据库,需要手动指定数据库驱动,配置方式请参考上面配置iTextAsainJAR包的步骤.

iReport(模版) 与Jasper(数据填充)生成pdf文档

iReport(模版) 与Jasper(数据填充)生成pdf文档

iReport(模版) 与Jasper(数据填充)生成pdf文档

iReport(模版) 与Jasper(数据填充)生成pdf文档

iReport(模版) 与Jasper(数据填充)生成pdf文档

指定SQL语句

iReport(模版) 与Jasper(数据填充)生成pdf文档

Fields中拖拽需要的数据到模版中Detail区域

iReport(模版) 与Jasper(数据填充)生成pdf文档

此时可以用鼠标拖动控件到合适的区域,如果需要修改对应的表头,可以直接在Page Header区域进行修改,如下图所示

iReport(模版) 与Jasper(数据填充)生成pdf文档

如果需要添加动态参数,右键单击 Parameter进行添加

iReport(模版) 与Jasper(数据填充)生成pdf文档

修改Parameterkey

iReport(模版) 与Jasper(数据填充)生成pdf文档

修改之后,拖动到合适的区域

iReport(模版) 与Jasper(数据填充)生成pdf文档

至此,版创建成功

如需预览,点击预览按钮即可

iReport(模版) 与Jasper(数据填充)生成pdf文档

二、 使用Jasper生成PDF

1、导入依赖

 1 ​​<!-- itext -->
 2 ​​<dependency>
 3   ​​​<groupId>com.lowagie</groupId>
 4 ​​​  <artifactId>itext</artifactId>
 5   ​​​<version>2.1.7</version>
 6 ​​</dependency>
 7 ​​<dependency>
 8 ​​​  <groupId>com.itextpdf</groupId>
 9   ​​​<artifactId>itext-asian</artifactId>
10   ​​​<version>5.2.0</version>
11 ​​</dependency>
12  
13 ​​<!-- groovy -->
14 ​​<dependency>
15   ​​​<groupId>org.codehaus.groovy</groupId>
16   ​​​<artifactId>groovy-all</artifactId>
17 ​​​  <version>2.2.0</version>
18 ​​</dependency>
19  
20 ​​<!-- jasperreport -->
21 ​​<dependency>
22 ​​​  <groupId>net.sf.jasperreports</groupId>
23 ​​​  <artifactId>jasperreports</artifactId>
24 ​​​  <version>5.2.0</version>
25   ​​​<exclusions>
26 ​​​​    <exclusion>
27       ​​​​​<groupId>com.lowagie</groupId>
28 ​​​​​      <artifactId>itext</artifactId>
29 ​​​​    </exclusion>
30 ​​​  </exclusions>
31 ​​</dependency>

拷贝iReport设计好的模版到工程中

iReport(模版) 与Jasper(数据填充)生成pdf文档

2、前台代码

增加按钮
{
    ​​id : 'button-export',
​​    text : '导出PDF',
​​    iconCls : 'icon-undo',
​​    handler : doExportPDF
​}
绑定按钮点击事件
​function doExportPDF() {
    ​​window.location.href = "../../areaAction_exportPDF.action"
​}

3、java代码

实现Action
 1 @Autowired
 2    private DataSource dataSource;
 3  
 4    @Action("areaAction_exportPDF")
 5    public String exportPDF() throws Exception {
 6  
 7        // 读取 jrxml 文件
 8        String jrxml = ServletActionContext.getServletContext()
 9                .getRealPath("/jasper/area.jrxml");
10        // 准备需要数据
11        Map<String, Object> parameters = new HashMap<String, Object>();
12        parameters.put("company", "黑马程序员");
13        // 准备需要数据
14        JasperReport report = JasperCompileManager.compileReport(jrxml);
15        JasperPrint jasperPrint = JasperFillManager.fillReport(report,
16                parameters, dataSource.getConnection());
17  
18        HttpServletResponse response = ServletActionContext.getResponse();
19        OutputStream ouputStream = response.getOutputStream();
20        // 设置相应参数,以附件形式保存PDF
21        response.setContentType("application/pdf");
22        response.setCharacterEncoding("UTF-8");
23        response.setHeader("Content-Disposition",
24                "attachment; filename=" + FileDownloadUtils
25                        .encodeDownloadFilename("工作单.pdf", ServletActionContext
26                                .getRequest().getHeader("user-agent")));
27        // 使用JRPdfExproter导出器导出pdf
28        JRPdfExporter exporter = new JRPdfExporter();
29        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
30        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
31        exporter.exportReport();// 导出
32        ouputStream.close();// 关闭流
33  
34        return NONE;
35    }
4、解决字体无法加载的异常
将下载地址中的iTextAsian.jar部署到Maven本地仓库,命令 :
  mvn install:install-file -DgroupId=com.xxxxx -DartifactId=iTextAsain -Dversion=10.2.0.2.0 -Dpackaging=jar -Dfile=路径
将pom文件中的坐标替换
原坐标
​​<dependency>
  ​​​<groupId>com.itextpdf</groupId>
​​​  <artifactId>itext-asian</artifactId>
​​​  <version>5.2.0</version>
​​</dependency>
新坐标,该坐标请根据自己本地仓库的实际情况进行修改
​​<dependency>
​​​  <groupId>com.alpha</groupId>
​​​  <artifactId>itextasain</artifactId>
​​​  <version>10.2.0.2.0</version>
​​</dependency>

三、效果

1、网页端

iReport(模版) 与Jasper(数据填充)生成pdf文档

2、生成的pdf文件:

iReport(模版) 与Jasper(数据填充)生成pdf文档