目录
一、Jasper下载地址
Jaspersoft® Studio | Jaspersoft Communityhttps://community.jaspersoft.com/project/jaspersoft-studio
二、准备工作
1.创建一个工作区
(1)File->New->Project
(2)右键test文件夹->New->Jasper Report ,选择模板并命名
2.编辑器结构
3.理解模板设计区域中元素分组的作用
三、绘制一个K-V表格
(1)新建一个模板文件,删除不需要的元素分组,留下Title, Detail1两部分。
(2)右上方组件区域拖拽一个Static Text到Title分组中。
双击Static Text修改文本内容。
右下角组件属性中添加边框,修改字体、大小、居中等属性。
调整文本框大小,将文本框拖拽到合适的位置。
(3)再添加一个Static Text到Detail1分组中。
(4)添加一个K-V变量。
左下角右键Parameters->create parameter
点击新增的Parameter1,在右侧属性栏中修改变量名为name,类型默认为String。
从左侧将修改好后的name拖拽至Detail1中。
(5)以同样方法创建出其他方格,调整位置。
(6)添加图片
从组件栏中拖拽一个Image组件到Detail1中。
选择默认的No image
添加一个Parameters变量,命名为image,点击class右侧的 … ,输入java.io.inputStream,设置image变量的属性为字节流。
点击图片,image->Expression设置为:$P{image}
在java填入模板时,key为image,value为new FileInputStream(filePath)
(7)完整模板
(8)使用Java填充数据并导出成PDF文件。
将生成的模板复制到自定义的路径下,这里放在D盘根目录。
pom依赖:
<!-- jasper 模板转PDF文件 -->
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.20.0</version>
</dependency>
PDFUtil.java:
/**
* 对table模板填充数据并生成PDF
* @throws Exception
*/
public static void createTable() throws Exception {
//模板文件路径
String jrxmlPath = "D:\\test.jrxml";
//模板编译后文件路径
String jasperPath = "D:\\test.jasper";
if (!new File(jasperPath).exists()){
//编译模板
JasperCompileManager.compileReportToFile(jrxmlPath,jasperPath);
}
//定义一个map,用来保存模板中parameters的变量
Map<String, Object> paramters = new HashMap<String, Object>();
//构造模板数据
paramters.put("name", "pdf");
paramters.put("ID", "001");
paramters.put("department", "IT研发部");
//图片路径
String imagePath = "D:\\1.png";
//将图片定义为字节流,放入map中
InputStream is = new FileInputStream(imagePath);
paramters.put("image", is);
//填充数据---使用JavaBean数据源方式填充
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath,paramters,new JREmptyDataSource());
//输出文件
String pdfPath = "D:\\test.pdf";
JasperExportManager.exportReportToPdfFile(jasperPrint,pdfPath);
is.close();
}
(9)JasperReport不支持中文,需要指定字体路径。
在C:\Windows\Fonts目录下,复制需要的字体文件到Java项目的resource\Fonts目录下,并修改后缀为 .TTF。
jasperreports_extension.properties
# JasperReports字体配置的工厂
net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
# 指定字体配置的位置
net.sf.jasperreports.extension.simple.font.families.lobstertwo=fonts/fonts.xml
fonts.xml
<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
<!-- name 的值要与模板字体名字保持一致 -->
<fontFamily name="宋体">
<normal>
<ttf>fonts/STSong.TTF</ttf>
<svg>fonts/STSong.TTF</svg>
<eot>fonts/STSong.TTF</eot>
<woff>fonts/STSong.TTF</woff>
</normal>
<bold>fonts/STSong.TTF</bold>
<italic>fonts/STSong.TTF</italic>
<boldItalic>fonts/STSong.TTF</boldItalic>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
<exportFonts/>
</fontFamily>
</fontFamilies>
main方法:
public static void main(String[] args) throws Exception {
PDFUtil.createList();
}
生成PDF文件。
四、绘制一个数组表格
(1)新建一个模板文件,保留Title, Column Header, Detail1元素分组,其余删除。
(2)添加一个Static Text到Title分组中。(标题)
(3)添加Fields变量
左下角变量栏中,右键Fields->Create Field,修改变量名
同样的方法创建出其他表头数据
(4)将Fields中的三个变量拖拽到Detail1中,会自动在Column Header中生成对应的表头,修改表头内容,并调整位置。
注意!
表头下边栏需要紧贴Column Header分组的底部,表格数据的上下边分别紧贴Detail1分组的顶部和底部。建议先调整位置,大小,再添加表格边框。
否则生成出来的表格会出现分离的现象,行与行之间会有空白。
(8)使用Java填充数据并导出成PDF文件。
将生成的模板复制到自定义的路径下,这里放在D盘根目录。
PDFUtil.java
public static void createList() throws Exception {
String jrxmlPath = "D:\\test.jrxml";
String jasperPath = "D:\\test.jasper";
if (!new File(jasperPath).exists()){
//编译模板
JasperCompileManager.compileReportToFile(jrxmlPath,jasperPath);
}
//创建模拟的map数组
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
for (int i=1;i<=5;i++) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", "" + i);
map.put("name", "用户" + i);
map.put("date", "日期" + i);
list.add(map);
}
/* 也可以使用对象数组的方式填入模板
List<User> list = new ArrayList<User>();
for (int i=1; i<=5; i++){
User user = new User(""+i, "用户"+i, "日期"+i);
list.add(user);
}
*/
//填充数据---使用JavaBean数据源方式填充
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath, null, new JRBeanCollectionDataSource(list));
//输出文件
String pdfPath = "D:\\YZJ\\XM\\ExectToPdf\\JasperReportsResource\\test.pdf";
JasperExportManager.exportReportToPdfFile(jasperPrint,pdfPath);
}
五、Jasper导出为PDF时字体加粗不生效
这个问题还没有解决,欢迎各位大佬留言指教。