项目需求:
在客户端弹出jasperviwer的applet,使得客户端可以随意导出为多种格式,同意也省了代码的开发,直接用JasperReport自带
的applet就行了。在客户端弹出jasperviewer在我的旧文章中有说明,现在说的是如果在jasperviwer中弹出另一个applet,
因为看源码,如果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报表中弹出别的报表,即可以在报表中加外部报表的链接了。