iReport使用拓展:在客户端IE中使用jasperView

要使在客户端生成jasperView的applet,

注意:

applet.jar,carnet.crt都在WebRoot目录下

applet.jar包括了jasperreport.jar,poi.jar,jxl.jar,jfreechat.jar,antlr.jar,commons.jar….

可根据功能去掉一些jar,为了方便,我全部打包一下applet.jar里了

如果仅有jasperreport.jar,客户端的生成的jasperView只能浏览报表内容。但是不能够导出,保存.

1)servlet,返回jasperPrint的数据流

resp.setContentType("application/octet-stream");

try{

ObjectOutputStreamout=newObjectOutputStream(resp.getOutputStream());

out.writeObject(ReportFactory.getReport(jasperNameValue,map));

out.flush();

out.close();

}catch(Exceptionex){

}

//将jasperPrint以流方式发送到客户端,让applet接收

2)test1.jsp调用报表的servlet链接

<appletcode="ViewReport.class"archive="applet.jar"width="600"height="500">

<name="REPORT_URL"value="<ahref="http://www2.blogger.com/jaspername="date1="2006-09-01&date2="cancelcount="1&guaranteeNo=">http://192.168.0.1:80/test/viewReport/?jasperName=WeeklyIssuanceReport1&date1=2006-09-01&date2=2006-12-01&cancelCount=1&guaranteeNo=2</a>">

</applet>

//其中applet.jar的类有很多,下面有说明

ViewReport.class是用在applet.jar的根下的

3)Applet调用JasperViewer.viewReport(jprint,false);

publicclassViewReportextendsJApplet{

publicViewReport()throwsHeadlessException{

super();

//TODOAuto-generatedconstructorstub

}

publicvoidinit(){

try{

URLurl=newURL(this.getParameter("REPORT_URL"));

JasperPrintjprint=(JasperPrint)JRLoader.loadObject(url);

JasperViewer.viewReport(jprint,false);

}catch(Exceptionex){

JOptionPane.showMessageDialog(this,ex.getMessage());

}

}

publicvoidstart(){

}

}

4)给Applet.jar进行数字签名

1.Generatekey:于commandline下输入keyname是你自己设的。这里叫javaworld。

1

keytool-genkey-keyalgrsa-aliascarnet

填入你的资讯。此时产生的是key而已。2.Exportkey:于commandline下输入keyname是你刚才设的。叫javaworld。anyname是你自己设要产出的cert。我都取和keyname一样。

1

keytool-export-aliascarnet-filecarnet.crt

3.key已成为档案。4CreateJAR:于commandline下输入applet名称看你自己要jar谁…

1

jarcvfjarname.jarViewReport.class

如果是目录里所有的档案的话例如你的东西全在classes目录下,可先进入此目录,再键入

1

jarcvfxxx.jar.

那一"点"记得要加…代表以下所有档案。5.signjar:于commandline下输入keyname就之前输入的那个名字。carnet。

1

jarsignerjarname.jarcarnet

6.密码不要忘了耶。7.每次compileclasses后,要再编成jar一次,再singer一次。

先用cmd命令去到applet的目录下,动行上面的命令,就可以生成经过签名的jar包了,

同时生成carnet.crt

5)打开</ahref="http://192.168.0.161/test/test1.jsp">http://192.168.0.161/test/test1.jsp</a>

这样,就可以提示是否信任数字签名,然后点"YES"就可以了

以测试,别的机也可以看到.



Jasperview的applet中加超链接

项目需求:

在客户端弹出jasperviwer的applet,使得客户端可以随意导出为多种格式,同意也省了代码的开发,,直接用applet就行了,在客户端弹出jasperviewer在我的旧文章中有说明,

现在说的是如果在jasperviwer中弹出另一个applet的jasperviwer,因为看源码,如果HyperLink是REFERENCE,那么是什么也不做的,,现改为点击REFERENCE的HyperLink后,弹出新的applet.

在用ireport设计报表的时候,选中texf-field的属性,然后输入HyperLink的相关内容,

但是在用applet的jasperview是,报表中的链接如果都是外部链接的话,都没反应,,这是因为:

net.sf.jasperreports.view.JRViewer

publicvoidgotoHyperlink(JRPrintHyperlinkhyperlink)

switch(hyperlink.getHyperlinkType()){

caseJRHyperlink.HYPERLINK_TYPE_REFERENCE:

{//这里并没有对外部链接进行处理

if(hyperlinkListeners!=null&&hyperlinkListeners.size()>1){

System.out.println("Hyperlinkreference:"+hyperlink.getHyperlinkReference());

System.out.println("ImplementyourownJRHyperlinkListenertomanagethistypeofevent.");

}

break;

}

所以要修改源码,我的做法是:

重新写一个jasperViewe1和一个jrViewer1

放在net.sf.jasperreports.view包中,,

jrViewer1的gotoHyperLink函数体为:

publicvoidgotoHyperlink(JRPrintHyperlinkhyperlink){

super.gotoHyperlink(hyperlink);

if(hyperlink.getHyperlinkType()==JRHyperlink.HYPERLINK_TYPE_REFERENCE){

//log.info("Hyperlinkreference:"+hyperlink.getHyperlinkReference());

try{

JasperPrintjprint=(JasperPrint)JRLoader.loadObject(newURL(hyperlink.getHyperlinkReference()));

JasperViewer.viewReport(jprint,false);

//通过这句话,在jasperView的applet上点击链接时,将会弹出一个新的applet窗口,显示别的内容

}catch(Exceptionex){

JOptionPane.showMessageDialog(this,ex.getMessage());

}

}

}

JasperViewer1代码,因为JasperViewer中的代码的JRViewer是不能set进去的,,所以必须重一写一个JRViewer1类,,JRViewer对象改为jrView1对象…这样才行,,

然后在applet初始的时候调JasperViewer1来弹出JasperViewer,,,

用以上方法,就可以实现在jasperViewer的applet报表中弹出别的报表,即可以在报表中加外部报表的链接了

你可能感兴趣的:(jsp,.net,servlet,IE,资讯)