web打印.docx
《web打印.docx》由会员分享,可在线阅读,更多相关《web打印.docx(27页珍藏版)》请在冰点文库上搜索。
![web打印.docx](https://file1.bingdoc.com/fileroot1/2023-5/29/01da5d6f-ed81-4da7-849e-2a3a3972e396/01da5d6f-ed81-4da7-849e-2a3a3972e3961.gif)
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