JasperReport + iReport 实现报表套打
最近有个朋友问我在 Java 的 JasperReport 中怎么实现报表的套打,其实之前我也没有想过这个问题,他这么一问让我想到了一个解决方案。这个解决方案应该是可以的。呵呵。。
我这里没有给出打印的代码。因为这样的代码网上到处都有的,所有我就没有放上来了。
package com.vincent.report.demo;
import net.sf.jasperreports.engine. * ;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.TreeMap;
public class Demo extends HttpServlet {
@SuppressWarnings( " deprecation " )
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String doType = request.getParameter( " doType " );
try {
// Jasper 文件
File reportFile = new File(request.getRealPath( " /jasperreport/liuxiaohua_report.jasper " ));
Map paramter = new TreeMap();
// 背景图片做为参数传递,不用写绝对路径
paramter.put( " image " , request.getRealPath( " /jasperreport/report.gif " ));
// 根据 doType 的不同,传递不同的参数(是否传递背景图片)
// 这里需要注意的是:这报表的设计的时候 image 这个参数的 Use as a Prompt 复选框不要选
// 如果你选了那你一定要传递这个参数过去
// 这样你就在显示报表的时候传递一个背景图,打印时不传递背景图,打印出来的报表就没有背景了
// 这样就可以实现套打,具体打印代码我就不写了。
byte [] bytes = JasperRunManager.runReportToPdf(
reportFile.getPath(), doType.equalsIgnoreCase( " print " ) ? null : paramter, new JREmptyDataSource());
// 生成PDF文件
response.setContentType( " application/pdf " );
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0 , bytes.length);
ouputStream.flush();
ouputStream.close();
} catch (Exception e) {
System.out.println( " error " );
e.printStackTrace();
}
}
}