import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRExporterParameter; import net.sf.jasperreports.engine.JasperCompileManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.data.JRMapCollectionDataSource; import net.sf.jasperreports.engine.export.JRHtmlExporter; import net.sf.jasperreports.engine.export.JRHtmlExporterParameter; import net.sf.jasperreports.j2ee.servlets.ImageServlet; /** * * <p>Web方式请求简单的JasperReport Servlet <p> * * 创建日期 2013-4-22<br> * @author longgangbai<br> * @version $Revision$ 2013-4-22 * @since 3.0.0 */ public class JasperReportServlet extends HttpServlet { private static final String CONTENTTYPE = "application/octet-stream"; /** * Constructor of the object. */ public JasperReportServlet() { super(); } /** * Destruction of the servlet. <br> */ public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } private static final long serialVersionUID = -2610486659053659764L; public JRDataSource createReportDataSource() { JRDataSource dataSource; Collection<Map<String, ?>> reportRows = initializeMapArray(); dataSource = new JRMapCollectionDataSource(reportRows); return dataSource; } public Collection<Map<String, ?>> initializeMapArray() { Collection<Map<String, ?>> reportRows = new ArrayList<Map<String, ?>>(); HashMap<String, Object> row1Map = new HashMap<String, Object>(); HashMap<String, Object> row2Map = new HashMap<String, Object>(); HashMap<String, Object> row3Map = new HashMap<String, Object>(); HashMap<String, Object> row4Map = new HashMap<String, Object>(); row1Map.put("tail_num", "N263Y"); row1Map.put("aircraft_serial", "T-11"); row1Map.put("aircraft_model", "39 ROSCOE TRNR RACER"); row1Map.put("engine_model", "R1830 SERIES"); row2Map.put("tail_num", "N4087X"); row2Map.put("aircraft_serial", "BA100-163"); row2Map.put("aircraft_model", "BRADLEY AEROBAT"); row2Map.put("engine_model", "R2800 SERIES"); row3Map.put("tail_num", "N43JE"); row3Map.put("aircraft_serial", "HAYABUSA 1"); row3Map.put("aircraft_model", "NAKAJIMA KI-43 IIIA"); row3Map.put("engine_model", "R1830 SERIES"); row4Map.put("tail_num", "N912S"); row4Map.put("aircraft_serial", "9973CC"); row4Map.put("aircraft_model", "PA18-150"); row4Map.put("engine_model", "R-1820 SER"); reportRows.add(row1Map); reportRows.add(row2Map); reportRows.add(row3Map); reportRows.add( row4Map); return reportRows; } /** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { response.setCharacterEncoding("utf-8"); response.setContentType("application/json;charset=utf-8"); response.setHeader("pragma", "no-cache"); response.setHeader("cache-control", "no-cache"); response.setContentType("text/html;charset=utf-8"); PrintWriter pw = response.getWriter(); // 创建数据源 JRDataSource jrdatasource = createReportDataSource(); String reportFile = getServletConfig().getServletContext().getRealPath("/resources/data/AircraftReport.jrxml"); JasperReport jrt = JasperCompileManager.compileReport(reportFile);//编译报表格式 //填充报表数据生成JasperPrint对象 JasperPrint jasperPrint = JasperFillManager.fillReport(jrt, new HashMap<String, Object>(), jrdatasource); JRHtmlExporter exporter = new JRHtmlExporter(); // 设置打印报表的信息 request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, pw); // 设置不显示jasperreports报表中的线条 // 显示线条的设置的参数 exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, true); //制定图片请求的路径 exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, request.getContextPath() + "/images/px."); exporter.exportReport(); pw.flush(); pw.close(); } catch (JRException e) { e.printStackTrace(); } } }
在web请求JasperReport报表缺少图片
解决方案如下:
在WebRoot目录添加images/px文件,px文件来源jasperreports-5.0.4\src\net\sf\jasperreports\engine\images目录下pixel.GIF修改为px.px
在Servlet添加请求设置图片路径的代码:
// 显示线条的设置的参数 exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, true); //制定图片请求的路径 exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, request.getContextPath() + "/images/px.");
相关推荐
### JSP Web应用开发教程知识点概述 #### 一、引言 随着互联网技术的发展,Java Web 开发成为了软件工程领域的重要组成部分。《JSP Web 应用开发实训教程》是一本专门为希望掌握 Java Web 技术的学生和开发者编写的...
在B/S环境下,通常需要将报表集成到Web应用中。为此,需要在WEB-INF/lib目录下添加必要的依赖库,如Apache Commons库、iText、JasperReports库等。此外,安装和使用iReport工具可以方便地创建和预览.jasper文件,它...
在B/S架构的应用程序开发中,报表处理一直是重要的组成部分。传统的处理方式包括生成CSV文件供用户下载后再行编辑,这种方式不仅效率低下且用户体验不佳。另一种方式是采用商业化的报表工具如水晶报表或润乾报表,但...
4. **Struts框架**:Struts是J2EE平台上的一个MVC(Model-View-Controller)框架,用于简化Web应用的开发。在报表系统中,Struts框架负责协调表现层、业务逻辑层和数据访问层的交互,提供了一种结构化的方式来管理...
STRUTS是一种MVC(模型-视图-控制器)框架,它为Java Web应用程序提供了结构化的开发框架,帮助开发者组织和管理业务逻辑,使得代码更易维护和测试。 JDBC(Java Database Connectivity)是Java语言访问数据库的...
- **知识点**:介绍了Chrome浏览器开发者工具的使用方法,帮助开发者调试Web应用。 21. **CSDN 下载 - Java 图形界面开发资源** - [http://download.csdn.net/album/detail/1013/2]...
报表应用程序的设计需要考虑用户如何自定义报表内容,如何展示报表(如 Web 展示或导出为 Excel),以及应用程序的整体架构(如桌面应用、C/S 或 B/S 架构)。 【总结】 报表设计是企业信息系统中的关键组成部分,...
- 报表的具体应用涉及用户交互、报表展现方式(如Web、Excel)以及系统架构(如桌面、C/S、B/S)。 3. **JFreeChart使用** - JFreeChart提供了一系列的类和方法来创建和定制图表,如`CategoryDataset`用于创建...
3. **系统架构**:报表应用程序可以是桌面应用、C/S架构或B/S架构,根据实际需求选择合适的技术栈。 总结来说,JasperReport和JFreeChart是Java平台上进行报表设计和图形化展示的重要工具。通过这两款工具,开发者...
- **具体应用**:包括用户自定义数据内容、报表展示方式(如Web、Excel)以及系统架构(如桌面应用、C/S、B/S)。 总结,JFreeChart是一个强大的图表库,它为Java应用程序提供了丰富的图表类型和自定义选项。结合...