前言
本文主要用来记录怎么使用 ireport 和使用 ireport 过程中遇到的常见问题
要准备的 Jar 包
- iTextAsian.jar – 字体包
- jasperreports-5.6.0 – 调用 ireport
新建 iReport 文件
简单说一下 ireport 怎么创建文件,后边我会把工具上传,前面主要还是熟悉一下大致的流程,首先是创建文件,这里我们就拿报表来作为示例。点击菜单栏 -- 文件 > new 会弹出来一个弹窗页面,如果常规的话我们选择第一个就可以了,但是我们如果是用来做报表之类的话就选择第二个,如下
输入文件名称,然后选择存放路径,点击下一步,最后点击完成
这个是创建完成的主界面,主界面分为三块区域,左边是文件的目录啥啥的,中间是用来绘制表单的,右边是一些用来绘制的组件,主要说一下中间的这块区域
Title:标题,例如 xxxx 文档
Page Header :页头,主要存放一些创建时间之类的
Column Header:数据列头部:主要用来放一些报表的列名(id,名称,年龄)
Detial:数据列,主要用来遍历的数据
Column Footer:数据列尾部,可以用来放一些说明啥的(我没用到)
Page Footer:页脚作用同上
Summary:看名字也知道是干啥的,主要是用来放合计,这个只在最后一页显示
绘制表单
绘制表格主要用到组件,一个是边框,一个是静态文本,静态文本是不可以赋值的,一个是动态可赋值文本,绘制完成后可点击预览按钮查看绘制情况,当然我们下方都是使用的静态文本绘制
创建数据源
点击这个小东西,然后选择 New ,默认选中第一个,Database JDBC connection ,点击 Next ,选择数据源类型,输入数据源连接,然后就是账号,密码,可以点击 Test 测试,测试通过后点击 Save 保存数据源
写入SQL(无查询条件版本)
如下图,这个地方可以选择很多种类型,例如 SQL ,JSON 啥啥的,自己可以多探究一下,在这就不多说了
写入SQL(有查询条件版本)
左侧第二列,选中点击右键,然后点击第一个,新建完成后,找到新建的这个字段右键重命名,命名成你要传过来的条件字段,打开编辑 SQL 的界面,然后把你刚刚定义的字段拖拽过去就 ok 了
执行预览
最后附上一张预览图
Java 调用 iReport 生成 PDF 文件
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperRunManager;
import java.io.File;
import java.sql.Connection;
import java.sql.Driver;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
/**
* @ClassName:iReportTest
* @Description:TODO 测试 iReport 生成 PDF
* @Author LinLuoChen
* @Date 2020/4/17/13:56
* @Version V1.0
**/
public class iReportTest {
public static void main(String[] args) {
try {
Connection connection = getConnection();
// 获取文件路径
String url = "F:\\ireport\\xxxx.jasper";
// 目标文件生成路径
String target = "F:\\ireport\\xxxx.pdf";
File file = new File(url);
Map<String,Object> parameters = new HashMap<String,Object>();
parameters.put("id", "xxxxxxx");
// 执行 ireport 方法
File f = new File(target);
File pf = f.getParentFile();
if(!pf.exists()){
pf.mkdirs();
}
JasperRunManager.runReportToPdfFile(file.getPath(), target, parameters,connection);
} catch (Exception e) {
e.printStackTrace();
}
}
// 构建测试数据源
public static Connection getConnection() throws Exception{
String driverName = "xxxxx"; // 数据源类型
String url = ""; // 数据源连接
String user = ""; // 数据库账号
String pass = ""; // 数据库密码
Driver driver = (Driver) Class.forName(driverName).newInstance();
Properties info = new Properties();
info.put("user",user); // 获取账号密码
info.put("password",pass); // 获取账号密码
Connection conn = driver.connect(url,info);
return conn;
}
}
常见问题
详细请查看:iReport 常见错误