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

要使在客户端生成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 {

ObjectOutputStream out = new ObjectOutputStream(resp.getOutputStream());

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

out.flush();

out.close();

} catch(Exception ex) {

}

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

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

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

<name ="REPORT_URL" value= "<a href="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);

public class ViewReport extends JApplet {

public ViewReport() throws HeadlessException {

super();

// TODO Auto-generated constructor stub

}

public void init() {

try {

URL url = new URL(this.getParameter("REPORT_URL"));

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

JasperViewer.viewReport(jprint, false);

} catch(Exception ex) {

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

}

}

public void start() {

}

}

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

1.Generate key: 于 command line下输入 keyname 是你自己设的。这里叫javaworld 。

1

keytool -genkey -keyalg rsa -alias carnet

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

1

keytool -export -alias carnet -file carnet.crt

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

1

jar cvf jarname.jar ViewReport.class

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

1

jar cvf xxx.jar .

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

1

jarsigner jarname.jar carnet

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

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

同时生成carnet.crt

5) 打开 </a href="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

public void gotoHyperlink(JRPrintHyperlink hyperlink)

switch(hyperlink.getHyperlinkType()){

case JRHyperlink.HYPERLINK_TYPE_REFERENCE :

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

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

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

System.out.println("Implement your own JRHyperlinkListener to manage this type of event.");

}

break;

}

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

重新写一个 jasperViewe1和一个jrViewer1

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

jrViewer1的 gotoHyperLink函数体为:

public void gotoHyperlink(JRPrintHyperlink hyperlink) {

super.gotoHyperlink(hyperlink);

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

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

try {

JasperPrint jprint = (JasperPrint) JRLoader.loadObject(new URL(hyperlink.getHyperlinkReference()));

JasperViewer.viewReport(jprint, false);

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

} catch(Exception ex) {

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

}

}

}

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

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

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

相关文章
|
6月前
|
Web App开发 前端开发 JavaScript
|
1月前
|
存储 机器人
在阿里云RPA中,你可以通过以下步骤来更改默认唤醒IE浏览器的地址
【2月更文挑战第28天】在阿里云RPA中,你可以通过以下步骤来更改默认唤醒IE浏览器的地址
20 1
|
7月前
|
Web App开发 XML 编解码
IE浏览器下载文件中文文件名乱码问题解决
IE浏览器下载文件中文文件名乱码问题解决
84 0
|
4月前
|
Web App开发 JavaScript 前端开发
JavaScript在IE和标准浏览器下的兼容性处理
JavaScript在IE和标准浏览器下的兼容性处理
41 0
|
5月前
|
前端开发
border-radius 兼容 IE8浏览器
border-radius 兼容 IE8浏览器
40 1
|
5月前
|
Web App开发 移动开发 安全
IE浏览器,和Edge浏览器
IE浏览器,和Edge浏览器