web打印.docx

上传人:b****3 文档编号:11213970 上传时间:2023-05-29 格式:DOCX 页数:27 大小:22.42KB
下载 相关 举报
web打印.docx_第1页
第1页 / 共27页
web打印.docx_第2页
第2页 / 共27页
web打印.docx_第3页
第3页 / 共27页
web打印.docx_第4页
第4页 / 共27页
web打印.docx_第5页
第5页 / 共27页
web打印.docx_第6页
第6页 / 共27页
web打印.docx_第7页
第7页 / 共27页
web打印.docx_第8页
第8页 / 共27页
web打印.docx_第9页
第9页 / 共27页
web打印.docx_第10页
第10页 / 共27页
web打印.docx_第11页
第11页 / 共27页
web打印.docx_第12页
第12页 / 共27页
web打印.docx_第13页
第13页 / 共27页
web打印.docx_第14页
第14页 / 共27页
web打印.docx_第15页
第15页 / 共27页
web打印.docx_第16页
第16页 / 共27页
web打印.docx_第17页
第17页 / 共27页
web打印.docx_第18页
第18页 / 共27页
web打印.docx_第19页
第19页 / 共27页
web打印.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

web打印.docx

《web打印.docx》由会员分享,可在线阅读,更多相关《web打印.docx(27页珍藏版)》请在冰点文库上搜索。

web打印.docx

web打印

为了方便更多的人了解、使用Java打印,写了这个!

也希望高手们不吝赐教,指出其中的不足之处,帮助我们提高项目性能,谢谢!

背景:

.NET项目中用webprint3.0破解版进行打印。

客户反映可否不预览、不弹出打印机对话框,点击“打印”按钮后打印机直接打印?

要求:

为了使打印精确,不可以使用IE的打印功能;另外打印的时候不可以弹出打印预览、打印机对话框,打印机直接打印。

环境:

WindowsXP、IE6.0、JDK(JRE)1.6U14、MyEclipse6.5、Tomcat5.5、Oracle10gr2

使用工具:

jasperreports-3.0.1、ireport3.1.0、iTextAsian.jar、apache-ant-1.7.1。

解决方案:

使用JasperReport+iReport生成形如*.jrxml报表模板文件,servlet调用这个*.jrxml文件根据指定sql语句生成JasperReport报表打印文件,客户端applet调用服务器servlet得到JasperPrint报表打印文件后使用JasperReport直接打印。

技术难点:

pdf报表的生成、applet与服务器servlet之间的通信、pdf报表文件的读写操作、applet打包及其签名。

详细步骤及其关键部分源码展示:

1、JDK的安装配置。

关于JDK的安装,JDK环境变量JAVA_HOME、系统环境变量CLASSPATH、系统环境变量Path的配置笔者不再赘述。

2、ant的安装和配置。

下载:

http:

//ant.apache.org(笔者使用的是apache-ant-1.7.1,已经将apache-ant-1.7.1-bin.zip包共享至csdn资源)。

配置:

ant无需安装,解压后就算安装完成。

但要在系统变量中增加ANT_HOME环境变量,变量值为解压缩后的ant所在目录。

在环境变量Path中增加%ANT_HOME%\bin目录。

3、JasperReport的安装和配置。

下载:

(笔者使用的是jasperreports-3.0.1,已经将jasperreports-3.0.1.rar包共享至作者的csdn资源,解压缩后包含jasperreports-3.0.1.jar、jasperreports-3.0.1-applet.jar、jasperreports-3.0.1-javaflow.jar三个工具包,足够我们开发报表、打印报表使用了)。

配置:

没有必要单独为JasperReport.jar文件包设置目录,直接放在%JAVA_HOME%\lib目录中即可。

然后将JasperReport-x.x.x.jar文件添加到操作系统环境变量CLASSPATH中即可完成对JasperReport的配置。

4、iReport的安装和配置。

下载:

这个大一点,要有40M。

iReport比较成熟,很容易就可以下载到它的zip格式的文件包(作者使用的是ireport3.1.0,已经共享ireport3.1.0.zip至csdn资源,大小44M)。

iReport也无需安装,直接解压后就算完成了安装,也无需配置。

但是我们需要处理中文用到iTextAsia.jar,需要从下载。

下载后将iTextAsia.jar放到iReport的lib目录中即可(笔者共享的ireport3.1.0.zip包里自带了一个iTextAsia.jar,无需单独下载。

另外笔者也单独上传了一份iTextAsia.jar至csdn资源)。

iReport在装了ant以后,直接运行iReport目录中的ireport.bat即可运行iReport。

5、根据项目需要使用iReport生成*.jrxml报表模板文件。

PS:

关于第1-5步,如果读者弄不太明白,可以去参考裴贺先写的《JasperReport与iReport的配置与使用》。

我有个pdf版的,已经共享至我的csdn资源。

6、新建一web项目Test2。

将iReport目录lib下的所有jar包导入。

在servlet程序中把从数据库得到的数据传入*.jrxml文件得到*.jrprint文件(这才是我们想要的东西),并把这个对象写入Stream流,以返还给请求客户端。

源码:

viewplaincopytoclipboardprint?

packagecom.defonds.test;

importjava.io.File;

importjava.io.IOException;

importjava.io.ObjectOutputStream;

importjavax.servlet.RequestDispatcher;

importjavax.servlet.ServletException;

importjavax.servlet.ServletOutputStream;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.ResultSet;

importjava.sql.SQLException;

importjava.sql.Statement;

importjava.util.Calendar;

importjava.util.HashMap;

importjava.util.Map;

importnet.sf.jasperreports.engine.JRResultSetDataSource;

importnet.sf.jasperreports.engine.JasperCompileManager;

importnet.sf.jasperreports.engine.JasperExportManager;

importnet.sf.jasperreports.engine.JasperFillManager;

importnet.sf.jasperreports.engine.JasperPrint;

importnet.sf.jasperreports.engine.JasperReport;

importnet.sf.jasperreports.engine.JasperRunManager;

/**

*建立数据库链接

*由sql语法取出资料,准备好传入的parameters

*将parameters及取出的资料传入Jasper中。

会由.jasper文档生出.jrprint文档

*再由.jrprint文档生出.pdf目的文档给调用页面下载

*@authorDefonds

*

*/

publicclassTestServlet3extendsHttpServlet{

privatestaticfinalStringCONTENTTYPE="application/octet-stream";

/**

*Constructoroftheobject.

*/

publicTestServlet3(){

super();

}

/**

*Destructionoftheservlet.

*/

publicvoiddestroy(){

super.destroy();//Justputs"destroy"stringinlog

//Putyourcodehere

}

/**

*ThedoGetmethodoftheservlet.

*

*Thismethodiscalledwhenaformhasitstagvaluemethodequalstoget.

*

*@paramrequesttherequestsendbytheclienttotheserver

*@paramresponsetheresponsesendbytheservertotheclient

*@throwsServletExceptionifanerroroccurred

*@throwsIOExceptionifanerroroccurred

*/

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

StringfileName="";

Stringsql="";

Mapparameters=newHashMap();

//parameters.put("rptToday",strDate);//传入的prameters引数

sql="select*fromtab_channel_car_basict";

Connectionconn=this.createConnection();//建立连接

try{

Statementstmt=conn.createStatement();

ResultSetrs=stmt.executeQuery(sql);

response.setContentType(CONTENTTYPE);

ServletOutputStreamouputStream=response.getOutputStream();

fileName="D:

\\iReport\\iReport-0.4.0\\Work\\carBasic3.jrxml";

JasperReportjrt=JasperCompileMpileReport(fileName);//编译报表格式

JasperPrintjpt=JasperFillManager.fillReport(jrt,parameters,newJRResultSetDataSource(rs));//匹配数据源,生成JasperPrint

ObjectOutputStreamoos=newObjectOutputStream(ouputStream);

oos.writeObject(jpt);

oos.flush();

oos.close();

}catch(Exceptione){

System.out.println("Error:

"+e.toString());

e.printStackTrace();

}finally{

CloseConnect(conn);

conn=null;

}

}

/**

*建立连接方法

*@returnConnection

*/

publicConnectioncreateConnection(){

Connectionconn;

try{

Stringdriver="oracle.jdbc.driver.OracleDriver";

Stringurl="jdbc:

oracle:

thin:

@localhost:

1521:

CUC";

Class.forName(driver);

conn=DriverManager.getConnection(url,"sybj","sybj");

conn.setAutoCommit(false);

returnconn;

}catch(SQLExceptione1){

System.out.println("建立连接错误="+e1.toString());

e1.printStackTrace();

}catch(ClassNotFoundExceptione2){

System.out.println("建立连接错误="+e2.toString());

e2.printStackTrace();

}

returnnull;

}

/**

*关闭连接方法

*@paramconn

*/

publicvoidCloseConnect(Connectionconn){

try{

mit();

conn.setAutoCommit(true);

conn.close();

}catch(Exceptione){

System.out.println("关闭连接错误="+e.toString());

}

}

}

packagecom.defonds.test;

importjava.io.File;

importjava.io.IOException;

importjava.io.ObjectOutputStream;

importjavax.servlet.RequestDispatcher;

importjavax.servlet.ServletException;

importjavax.servlet.ServletOutputStream;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.ResultSet;

importjava.sql.SQLException;

importjava.sql.Statement;

importjava.util.Calendar;

importjava.util.HashMap;

importjava.util.Map;

importnet.sf.jasperreports.engine.JRResultSetDataSource;

importnet.sf.jasperreports.engine.JasperCompileManager;

importnet.sf.jasperreports.engine.JasperExportManager;

importnet.sf.jasperreports.engine.JasperFillManager;

importnet.sf.jasperreports.engine.JasperPrint;

importnet.sf.jasperreports.engine.JasperReport;

importnet.sf.jasperreports.engine.JasperRunManager;

/**

*建立数据库链接

*由sql语法取出资料,准备好传入的parameters

*将parameters及取出的资料传入Jasper中。

会由.jasper文档生出.jrprint文档

*再由.jrprint文档生出.pdf目的文档给调用页面下载

*@authorDefonds

*

*/

publicclassTestServlet3extendsHttpServlet{

privatestaticfinalStringCONTENTTYPE="application/octet-stream";

/**

*Constructoroftheobject.

*/

publicTestServlet3(){

super();

}

/**

*Destructionoftheservlet.

*/

publicvoiddestroy(){

super.destroy();//Justputs"destroy"stringinlog

//Putyourcodehere

}

/**

*ThedoGetmethodoftheservlet.

*

*Thismethodiscalledwhenaformhasitstagvaluemethodequalstoget.

*

*@paramrequesttherequestsendbytheclienttotheserver

*@paramresponsetheresponsesendbytheservertotheclient

*@throwsServletExceptionifanerroroccurred

*@throwsIOExceptionifanerroroccurred

*/

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

StringfileName="";

Stringsql="";

Mapparameters=newHashMap();

//parameters.put("rptToday",strDate);//传入的prameters引数

sql="select*fromtab_channel_car_basict";

Connectionconn=this.createConnection();//建立连接

try{

Statementstmt=conn.createStatement();

ResultSetrs=stmt.executeQuery(sql);

response.setContentType(CONTENTTYPE);

ServletOutputStreamouputStream=response.getOutputStream();

fileName="D:

\\iReport\\iReport-0.4.0\\Work\\carBasic3.jrxml";

JasperReportjrt=JasperCompileMpileReport(fileName);//编译报表格式

JasperPrintjpt=JasperFillManager.fillReport(jrt,parameters,newJRResultSetDataSource(rs));//匹配数据源,生成JasperPrint

ObjectOutputStreamoos=newObjectOutputStream(ouputStream);

oos.writeObject(jpt);

oos.flush();

oos.close();

}catch(Exceptione){

System.out.println("Error:

"+e.toString());

e.printStackTrace();

}finally{

CloseConnect(conn);

conn=null;

}

}

/**

*建立连接方法

*@returnConnection

*/

publicConnectioncreateConnection(){

Connectionconn;

try{

Stringdriver="oracle.jdbc.driver.OracleDriver";

Stringurl="jdbc:

oracle:

thin:

@localhost:

1521:

CUC";

Class.forName(driver);

conn=DriverManager.getConnection(url,"sybj","sybj");

conn.setAutoCommit(false);

returnconn;

}catch(SQLExceptione1){

System.out.println("建立连接错误="+e1.toString());

e1.printStackTrace();

}catch(ClassNotFoundExceptione2){

System.out.println("建立连接错误="+e2.toString());

e2.printStackTrace();

}

returnnull;

}

/**

*关闭连接方法

*@paramconn

*/

publicvoidCloseConnect(Connectionconn){

try{

mit();

conn.setAutoCommit(true);

conn.close();

}catch(Exceptione){

System.out.println("关闭连接错误="+e.toString());

}

}

}

PS:

这里,关于carBasic3.jrxml文件的提取,笔者采用的是物理路径,读者可以把*.jrxml文件放到项目根目录下,然后采用其他方式提取。

如果输入http:

//localhost:

9999/Test2/testServlet3就弹出来一个下载窗口,证明这个servlet已经ok(笔者tomcat端口号设置的是9999,在Test2项目中进行测试)。

7、appl

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2