Posted on 2005-01-10 13:16 
海天一鸥 阅读(1779) 
评论(6)  编辑  收藏  所属分类: 
报表专题 
			 
			
		 
		  jasper变量的表达式的问题 
   
 jasper中的field字段的定义: 
XML Syntax 
<!ELEMENT field (fieldDescription?)> 
<!ATTLIST field 
name NMTOKEN #REQUIRED 
class (java.lang.Object | java.lang.Boolean | java.lang.Byte | 
java.util.Date | java.sql.Timestamp | java.lang.Double | java.lang.Float | 
java.lang.Integer | java.io.InputStream | java.lang.Long | java.lang.Short | 
java.math.BigDecimal | java.lang.String) "java.lang.String" 
> 
<!ELEMENT fieldDescription (#PCDATA)> 
注意他们的实例都是对象, 
对象不能用简单的+的方式, 
比如你想对两个类型为java.lang.Double的field进行相加 
那么就应该用如下表达式 
($F{field1}.doubleValue()+$F{field2}.doubleValue())  
而不是 
($F{field1}+$F{field2})  
设定某个类型为java.lang.Double的初始值是 
应该用new java.lang.Double(3) 
而不是3 
其他类型的数据也一样 
   
 iReport 0.3.0 不能启动的问题 
   
 注意 iReport 0.3.0 需要JDK 1.4 的版本 
还有用Oracle9的注意了,由于Oracle9自带的是JDK1.3版本的 
所以可能会导致iReport在启动时用到Oracle中的JDK而导致无法启动 
   
 如何让显示的数据自动折行显示 
   
 可以选择field,-> text filed ->有个框打勾 
strech with overflow  
关于此功能的具体应用, 
大家可以参看JasperReport的samples -> stretch 
   
 jasperreport报表文件输出到pdf的中文问题 
   
 1、   你确定一下你的classpath下是否有itext和itextasia。 
 2、   确定你的pdf font是否设置汉字字体如STsong_light和pdf encoding是否是汉字的encoding  
这样之后如果还有问题,就是你的数据传送过来的乱码问题。 
   
 初学者实例:在WEB客户端直接打印JasperReport报表 
   
 当我不希望使用JasperReport生成pdf或html等报表显示文件到客户端后再通过相应打印功能打印,而想直接在客户端打印生成的报表时候,我们可以使用JasperPrintManager类里的printReport方法来实现打印。这里我给出我的一个测试实例: 
首先,我在服务器端的一个Servlet里调用报表格式文件、填充数据生成一个JasperPrint对象;然后将这个JasperPrint对象以对象流方式返回给客户端: 
public class JRPrintServlet extends HttpServlet { 
public void service( 
HttpServletRequest request, 
HttpServletResponse response 
) throws IOException, ServletException{ 
String fileName = reports/TestRpt.xml";//我的测试报表格式文件 
JasperReport jrt = JasperCompileManager.compileReport(fileName);//编译报表格式 
java.sql.Connection conn = DBBean.getConnection(); //获取数据库连接 
JasperPrint jpt = JasperFillManager.fillReport(jrt,hs,conn));//填充报表数据生成JasperPrint对象 
response.setContentType("application/octet-stream"); 
ServletOutputStream ouputStream = response.getOutputStream(); 
ObjectOutputStream oos = new ObjectOutputStream(ouputStream); 
oos.writeObject(jpt);//将JasperPrint对象写入对象输出流中 
oos.flush(); 
oos.close(); 
} catch (Exception e) { 
e.printStackTrace(); 
} 
}  
} 
} 
然后编写一个客户端Applet,通过对上面Servlet的请求获得该JasperPrint对象,并调用JasperPrintManager方法进行打印: 
public class JRPrinterApplet extends Applet { 
private URL url = null; 
public void init(){ 
String strUrl = getParameter("REPORT_URL"); 
if(strUrl!=null){ 
try{ 
System.out.println(getCodeBase()); 
url = new URL(getCodeBase(),strUrl);//从获得html参数中获得报表URL 
System.out.println(url); 
}catch(Exception e){ 
e.printStackTrace(); 
} 
}else 
JOptionPane.showMessageDialog(this, "Source URL not specified"); 
} 
public void start(){ 
if(url!=null){ 
try{ 
JOptionPane.showMessageDialog(this, url); 
Object obj = JRLoader.loadObject(url);//发送对象请求,获得JasperPrint对象 
System.out.println(obj); 
JasperPrintManager.printReport((JasperPrint)obj, true);//调用方法打印所获得的JasperPrint对象 
}catch(Exception e){ 
e.printStackTrace(); 
} 
} 
} 
} 
另外简单写一个测试html来调用以上applet: 
<!--JRPrintTest.html--> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=GB2312"> 
<title>打印窗口</title> 
</head> 
<script language="javascript"> 
<!-- 
function openApp() 
{ 
var url = "/JRPrintServlet"; 
document.write('<APPLET ID="JrPrt" CODE = "JRPrinterApplet.class" CODEBASE = "/reports" ARCHIVE = "jasper-api.jar" WIDTH = "0" HEIGHT = "0">'); 
document.write('<PARAM NAME = "type" VALUE="application/x-java-applet;version=1.2.2">'); 
document.write('<PARAM NAME = "scriptable" VALUE="false">'); 
document.write('<PARAM NAME = "REPORT_URL" VALUE ="'+url+'">'); 
document.write('</APPLET>'); 
} 
--> 
</script> 
<body bgcolor="#FFFFFF"> 
<input type="button" value="测试打印" onclick="openApp();"> 
</body> 
</html> 
这样,在客户端访问JRPrintTest.html页面,点击"测试打印"按钮,就能够直接在客户端打印机上打印出所要的报表。  
   
   
   
   
