- 浏览: 990169 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (223)
- JDBC技术 (29)
- Java Base (21)
- SSH框架的集合 (5)
- Javascript部分 (16)
- Sping2.5框架 (6)
- Hibernate框架 (19)
- JDBC中的数据库连接 (5)
- Ajax技术应用 (9)
- Java工具包下载 (3)
- Database (4)
- Java Web (13)
- 我的生活 (4)
- Struts2 (25)
- S2SH (1)
- Prototype (1)
- jfreeChart (5)
- JPA (7)
- JBPM (1)
- JasperReport (6)
- DWR (1)
- freeMark (2)
- IBatis (2)
- FCKeditor (2)
- POI (1)
- JQuery (6)
- JSON (1)
- JavaMail (3)
- Flex (2)
- CSS收藏夹 (1)
- 润乾报表 (2)
- 开源技术 (1)
- Android (2)
- Android_UI (1)
- Android_OS (6)
- Android_OpenLibs (3)
- Volley (1)
- JS_OpenLibs (1)
- Hessian (3)
- OS (1)
最新评论
-
damoluomu:
简单易懂
Java Web开发Session超时设置 -
di1984HIT:
学习了~~~~~~
Java Web开发Session超时设置 -
lord_is_layuping:
...
Java Web开发Session超时设置 -
15111285554:
...
Java Web开发Session超时设置 -
sfg1314:
暂停后重新下载就会报错:ClientAbortExceptio ...
Java Web 文件下载之断点续传
关于JasperReport的简介大家可以去google上去查,在这里就不作介绍了。
我的开发环境:MyEclipse 5.5 GA+iReport-nb-3.5.2。所用的JasperReport版本也是:jasperreports-3.5.2
所需要的jar可以从下面的lib1,lib2中获得,所有jar包除了iTextAsian.jar外都可以从jasperreports-3.5.2中找到!
JasperReport要和iReport一起使用开发起来才比较方便,要注意的是中文显示问题,设计模板的时候要注意以下三点:
Font name: 宋体 (中文字体)
PDF font name: STSong-Light
PDF Encoding: UniGB-UCS2-H(Chinese Siplified)
PDF Embeded: √
在应用程序中添加iTextAsian.jar
第一步:用iReport设计JasperReport模板并编译。结果有两个文件:preson.jrxml(模板文件),preson.jasper(编译文件)。在WebRoot下面新建文件夹jasper,将这两个文件放到该文件夹中。
第二步:构造我们的实体Bean
public class Person { private String person_Id; private String person_name; private String person_age; private String person_address; public Person() { } public Person(String id, String name, String age, String address) { this.person_Id = id; this.person_name = name; this.person_age = age; this.person_address = address; } //get,set方法就省掉了 }
第三步:构造我们的service
public class PersonService { public List<Person> getAllPerson() { List<Person> perList = new ArrayList<Person>(); perList.add(new Person("101", "小博", "22", "湖北")); perList.add(new Person("102", "张三", "21", "湖南")); perList.add(new Person("103", "李四", "23", "江苏")); perList.add(new Person("104", "王五", "22", "上海")); return perList; } }
第四步:构造我们的JRDataSource
package com.mengya.JRDataSource; import java.util.List; import com.mengya.bean.Person; import com.mengya.service.PersonService; import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRField; /** * 填充JaserperReort数据 * * @author 张明学 * */ public class PersonDataSource implements JRDataSource { private int index = -1; private List<Person> personList = new PersonService().getAllPerson(); public Object getFieldValue(JRField field) throws JRException { Object value = null; String fieldName = field.getName(); if ("person_Id".equals(fieldName)) { value = personList.get(index).getPerson_Id(); } else if ("person_name".equals(fieldName)) { value = personList.get(index).getPerson_name(); } else if ("person_age".equals(fieldName)) { value = personList.get(index).getPerson_age(); } else if ("person_address".equals(fieldName)) { value = personList.get(index).getPerson_address(); } return value; } public boolean next() throws JRException { index++; return index < personList.size(); } }
第五步:构造我们的Servlet
public class JRPrintServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context = this.getServletConfig().getServletContext(); File reportFile = new File(context.getRealPath("/jasper/preson.jasper")); Map<String, String> parameters = new HashMap<String, String>(); parameters.put("year", "2009"); parameters.put("unit_mc", "武汉XX科技有限公司"); JasperPrint jasperPrint = null; try { JasperReport jasperReport = (JasperReport) JRLoader.loadObject(reportFile.getPath()); jasperPrint = JasperFillManager.fillReport(jasperReport,parameters, new PersonDataSource()); } catch (JRException e) { e.printStackTrace(); } if (jasperPrint != null) { response.setContentType("application/octet-stream"); ServletOutputStream ouputStream = response.getOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(ouputStream); oos.writeObject(jasperPrint); oos.flush(); oos.close(); ouputStream.flush(); ouputStream.close(); } } }
web.xml中配置我们的servlet如下:
<servlet> <servlet-name>JRPrintServlet</servlet-name> <servlet-class>com.mengya.servlet.JRPrintServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>JRPrintServlet</servlet-name> <url-pattern>/JRPrintServlet</url-pattern> </servlet-mapping>
第六步:由于我们web打印是基于applet形式,故需要创建我们打印的applet如下:
import java.io.PrintWriter; import java.io.StringWriter; import java.net.URL; import javax.swing.JOptionPane; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperPrintManager; import net.sf.jasperreports.engine.util.JRLoader; public class JRPrinterApplet extends javax.swing.JApplet { private URL url = null; public void init() { String strUrl = getParameter("REPORT_URL"); if (strUrl != null) { try { url = new URL(getCodeBase(), strUrl);// 从获得html参数中获得报表URL // System.out.println("url=" + url.toURI());//要是servlet的路径 } catch (Exception e) { StringWriter swriter = new StringWriter(); PrintWriter pwriter = new PrintWriter(swriter); e.printStackTrace(pwriter); JOptionPane.showMessageDialog(this, swriter.toString()); } } else { JOptionPane.showMessageDialog(this, "Source URL not specified"); } } public void start() { if (url != null) { try { Object obj = JRLoader.loadObject(url);// 发送对象请求,获得JasperPrint对象 JasperPrintManager.printReport((JasperPrint) obj, true);// 调用方法打印所获得的JasperPrint对象 } catch (Exception e) { e.printStackTrace(); } } } }
重点提示:需要在WebRoot下面新一个applet文件夹,将jasperreports-3.5.2-applet.jar,commons-logging-1.0.2.jar,commons-collections-2.1.jar三个包加进去,还要将上面的JRPrinterApplet编译后的文件放进去。
(applet最好不要加包名,如果加了包名要建一个如包名一样的文件夹路径再将applet编译后的文件放进去再把它放到与applet同一目录中去,否则老报找一到这个类)
public final void setStub(AppletStub stub)//设置Applet的stub.stub是Java和C之间转换参数并返回值的代码位,它是由系统自动设定的。
public boolean isActive();// 判断一个Applet是否处于活动状态。
public URL getDocumentBase();// 检索表示该Applet运行的文件目录的对象。
public URL getCodeBase();// 获取该Applet 代码的URL地址。
public String getParameter(String name);// 获取该Applet 由name指定参数的值。
public AppletContext getAppletContext();// 返回浏览器或小应用程序观察器。
public void resize(int width,int height);// 调整Applet运行的窗口尺寸。
public void resize(Dimension d);// 调整Applet运行的窗口尺寸。
public void showStatus(String msg);// 在浏览器的状态条中显示指定的信息。
public Image getImage(URL url); // 按url指定的地址装入图象。
public Image getImage(URL url,String name);// 按url指定的地址和文件名加载图像。
public AudioClip getAudioClip(URL url);// 按url指定的地址获取声音文件。
public AudioClip getAudioClip(URL url, String name);// 按url指定的地址和文件名获取声音。
public String getAppletInfo();// 返回Applet应用有关的作者、版本和版权方面的信息;
public String[][] getParameterInfo();
// 返回描述Applet参数的字符串数组,该数组通常包含三个字符串: 参数名、该参数所需值的类型和该参数的说明。
public void play(URL url);// 加载并播放一个url指定的音频剪辑。
public void destroy();//撤消Applet及其所占用的资源。若该Applet是活动的,则先终止该Applet的运行。
* CODE标志
CODE标志指定Applet的类名;WIDTH和HEIGHT标志指定Applet窗口的像素尺寸。在APPLET语句里还可使用其他一些标志。
* CODEBASE 标志
CODEBASE标志指定Applet的URL地址。Applet的通用资源定位地址URL,它可以是绝对地址 ,如www.sun.com。也可以是相对于当前HTML所在目录的相对地址,如/AppletPath/Name。如果HTML文件不指定CODEBASE 标志,浏览器将使用和HTML文件相同的URL。
* ALT 标志
虽然Java在WWW上很受欢迎,但并非所有浏览器都对其提供支持。如果某浏览器无法运行Java Applet,那么它在遇到APPLET语句时将显示ALT标志指定的文本信息。
* ALIGN 标志
ALIGN标志可用来控制把Applet窗口显示在HTML文档窗口的什么位置。与HTML<LMG>语句一样,ALIGN标志指定的值可以是TOP、MIDDLE或BOTTOM。
* VSPACE与HSPACE 标志
VSPACE和HSPACE标志指定浏览器显示在Applet窗口周围的水平和竖直空白条的尺寸,单位为像素。如下例使用该标志在Applet窗口之上和之下各留出50像素的空白,在其左和其右各留出25像素的空白:
* NAME 标志
NAME标志把指定的名字赋予Applet的当前实例。当浏览器同时运行两个或多个Applet时,各Applet可通过名字相互引用或交换信息。如果忽略NAME标志,Applet的名字将对应于其类名。
* PARAM 标志
通用性是程序设计所追求的目标之一。使用户或者程序员能很方便地使用同一个Applet完成不同的任务是通用性的具体表现。从HTML文件获取信息是提高Applet通用性的一条有效途径。
假设编制了一个把某公司的名字在屏幕上卷动的Applet。为了使该Applet更加通用,则可以使该Applet从HTML文件获取需要卷动的文本信息。这样,若想显示另一个公司的名字,用不着修改Java Applet本身,只需修改HTML文件即可。
PARAM 标志可用来在HTML文件里指定参数,格式如下所示:
PARAM Name="name" Value="Liter"
Java Applet可调用getParameter方法获取HTML文件里设置的参数值。
第七步:构造我们的打印页面:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>打印窗口</title> </head> <script language="javascript"> <!-- function openApp() { var url = "../JRPrintServlet"; document.write('<APPLET ID="JrPrt" CODE = "JRPrinterApplet.class" CODEBASE = "applets" ARCHIVE = "jasperreports-3.5.2-applet.jar,commons-logging-1.0.2.jar,commons-collections-2.1.jar" WIDTH = "0" HEIGHT = "0">'); document.write('<PARAM NAME = "type" VALUE="application/x-java-applet;version=1.2.2">'); document.write('<PARAM NAME = "scriptable" VALUE="false">'); document.write('<PARAM NAME = "REPORT_URL" VALUE ="'+url+'">'); document.write('</APPLET>'); } --> </script> <body bgcolor="#FFFFFF"> <input type="button" value="测试打印" onclick="openApp();"> <!-- 不用上面的js只用下的标签也可以 --> <!-- <APPLET CODE="JRPrinterApplet.class" CODEBASE = "applets" ARCHIVE = "jasperreports-3.5.2-applet.jar,commons-logging-1.0.2.jar,commons-collections-2.1.jar" WIDTH="300" HEIGHT="40"> </XMP> <PARAM NAME=CODE VALUE="JRPrinterApplet.class"> <PARAM NAME = ARCHIVE VALUE = "jasperreports-3.5.2-applet.jar,commons-logging-1.0.2.jar,commons-collections-2.1.jar" > <PARAM NAME="type" VALUE="application/x-java-applet;version=1.2.2"> <PARAM NAME="scriptable" VALUE="false"> <PARAM NAME="REPORT_URL" VALUE="../JRPrintServlet"> </APPLET> --> </body> </html>
需要指出的是:该页面上的URL必须是servlet的路径。
其实上面的所有的东西都可以从jasperReprot自己带的demo中找到
在jasperreports-3.5.2-project\jasperreports-3.5.2\demo\samples\webapp中有web应用的例子。
打印需要在机器上按装jre-1_5_0_18-windows-i586-p.exe
- JasperReportDemo.rar (9.2 MB)
- 描述: jasperReport自带的web应用Demo
- 下载次数: 967
- MyJasperReportWebPrint.rar (528.5 KB)
- 描述: 我的实例没有jar包
- 下载次数: 622
- lib2.rar (5.7 MB)
- 描述: 所需要jar包2
- 下载次数: 625
- lib1.rar (6.6 MB)
- 描述: 所需要jar包1
- 下载次数: 608
评论
这个例子很好,感谢分享!
我在使用中,补充了个jar包才能使用,commons-logging-1.0.4.jar。
发表评论
-
jasperReport实现动态列打印
2010-03-23 19:35 5703public ActionResult projectPrin ... -
使用JavaBean构造JasperReport子报表
2010-01-27 14:05 10409使用JavaBean作为数据源构造JasperReport子报 ... -
JasperReport + Servlet Web应用之:HTML显示报表内容
2010-01-26 17:18 10027构造我们的JavaBean:(get,set方法省略,属性名称 ... -
JasperReport+Servlet Web应用之:导PDF,Excel,Rtf文件
2010-01-17 19:18 4291第一,二,三,四步请参照:JasperReport+Servl ... -
JasperReport+Servlet Web应用之:打印预览
2010-01-17 18:58 10458打印预览与打印的准备工作是一样的,第一,二,三,四,五步请参照 ...
相关推荐
**JasperReport与Servlet在Web应用中的打印预览** JasperReport是一款强大的开源报表工具,它允许开发者在Java应用程序、Web应用甚至独立的Java应用程序中创建复杂的报告。Servlet是Java Web开发中的一个重要组件,...
**JasperReport与iReport简介** JasperReport是一款开源的报告生成库,它...在实际项目中,合理地整合JasperReport到Web应用,不仅可以实现静态数据的展示,还可以实现动态数据的实时更新,为决策提供有力的数据支持。
Servlet是Java Web应用中处理客户端请求的组件,它可以接收请求参数,生成响应内容,然后将其发送回客户端。 4. **显示于页面**:生成的PDF文件可以通过HTTP响应发送到浏览器,展示在页面上。这样用户可以直接在...
Servlet是Java Web应用中的服务器端组件,用于接收HTTP请求并生成HTTP响应。在JasperReport的上下文中,Servlet的作用是处理客户端的请求,比如下载报表模板,填充数据,然后将生成的报表返回给Applet。Servlet可能...
1. **接收请求**:在Web应用中,创建一个处理请求的Servlet或Controller,接收前端发送的参数,如报表ID、数据参数等。 2. **生成报表**:按照客户端打印的步骤,编译模板,填充数据并生成PDF。 3. **返回响应**:有...
5. **Web打印**:在Web环境下,我们通常需要将报告集成到Web应用中。这涉及到创建一个Servlet,如`MyJasperReportWebPrint`,该Servlet接收用户请求,处理报告生成和打印。用户可以通过HTTP请求参数传递数据库连接...
该工具特别适用于WEB应用程序和Java Application中的报表打印需求,最大的优势在于其开源和免费的特性。 ##### 1.2 iReport简介 iReport同样是sf.net的一个项目,它是一款免费的报表设计软件,主要用于以可视化的...
此工具非常适合用于WEB应用程序和Java Application的报表生成需求,尤其吸引人的是它的开源和免费特性。 ##### 1.2 iReport简介 iReport同样是sf.net的一个开源项目,它主要作为JasperReport的辅助工具,提供了一...
- **Web应用支持**: 可以与Servlet容器集成,用于Web应用中的报表服务。 5. **UPJasperReport** 这可能是项目中使用的特定库或工具,可能包含了JasperReport的扩展或定制功能。通常,这样的库会提供额外的辅助类...
标题中的“ireport与java 桌面应用,web应用”揭示了本次讨论的核心主题,即如何使用ireport工具在Java环境下开发桌面应用程序和Web应用程序的报表功能。ireport是JasperReports库的一个图形化设计工具,允许开发者...
- `WebApp`: 集成到Web应用程序中,支持JSP、Servlet、Applet等技术。 #### 五、启动HSQLDB服务 1. **运行服务器**: - 在命令行中进入到`cmd/demo/hsqldb`目录。 - 执行`ant runServer`启动HSQLDB服务。 - 若...
- **JasperReport**: 开源的报表打印组件,适合于Web应用程序与Java Application的报表打印需求,可在sf.net获取,截至文章撰写时,最新版本为0.5.2。 - **iReport**: 作为JasperReport的可视化报表设计工具,弥补了...
Java JSP调用iReport动态模板打印是一种在Web应用程序中实现报表打印的常见技术。iReport是一款开源的报表设计工具,它可以与Java、JSP、Servlets等进行集成,为开发者提供灵活的报表生成和打印功能。在这个场景下,...
它广泛应用于 Web 应用程序和 Java 应用程序中作为报表打印组件,并且最重要的是它是完全免费的。 JasperReport 提供了一套完整的解决方案,包括数据获取、报告设计以及最终报表的渲染和输出。它可以支持多种输出...