Posted on 2005-01-10 13:16
海天一鷗 閱讀(1758)
評(píng)論(6) 編輯 收藏 所屬分類:
報(bào)表專題
jasper變量的表達(dá)式的問(wèn)題
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)>
注意他們的實(shí)例都是對(duì)象,
對(duì)象不能用簡(jiǎn)單的+的方式,
比如你想對(duì)兩個(gè)類型為java.lang.Double的field進(jìn)行相加
那么就應(yīng)該用如下表達(dá)式
($F{field1}.doubleValue()+$F{field2}.doubleValue())
而不是
($F{field1}+$F{field2})
設(shè)定某個(gè)類型為java.lang.Double的初始值是
應(yīng)該用new java.lang.Double(3)
而不是3
其他類型的數(shù)據(jù)也一樣
iReport 0.3.0 不能啟動(dòng)的問(wèn)題
注意 iReport 0.3.0 需要JDK 1.4 的版本
還有用Oracle9的注意了,由于Oracle9自帶的是JDK1.3版本的
所以可能會(huì)導(dǎo)致iReport在啟動(dòng)時(shí)用到Oracle中的JDK而導(dǎo)致無(wú)法啟動(dòng)
如何讓顯示的數(shù)據(jù)自動(dòng)折行顯示
可以選擇field,-> text filed ->有個(gè)框打勾
strech with overflow
關(guān)于此功能的具體應(yīng)用,
大家可以參看JasperReport的samples -> stretch
jasperreport報(bào)表文件輸出到pdf的中文問(wèn)題
1、 你確定一下你的classpath下是否有itext和itextasia。
2、 確定你的pdf font是否設(shè)置漢字字體如STsong_light和pdf encoding是否是漢字的encoding
這樣之后如果還有問(wèn)題,就是你的數(shù)據(jù)傳送過(guò)來(lái)的亂碼問(wèn)題。
初學(xué)者實(shí)例:在WEB客戶端直接打印JasperReport報(bào)表
當(dāng)我不希望使用JasperReport生成pdf或html等報(bào)表顯示文件到客戶端后再通過(guò)相應(yīng)打印功能打印,而想直接在客戶端打印生成的報(bào)表時(shí)候,我們可以使用JasperPrintManager類里的printReport方法來(lái)實(shí)現(xiàn)打印。這里我給出我的一個(gè)測(cè)試實(shí)例:
首先,我在服務(wù)器端的一個(gè)Servlet里調(diào)用報(bào)表格式文件、填充數(shù)據(jù)生成一個(gè)JasperPrint對(duì)象;然后將這個(gè)JasperPrint對(duì)象以對(duì)象流方式返回給客戶端:
public class JRPrintServlet extends HttpServlet {
public void service(
HttpServletRequest request,
HttpServletResponse response
) throws IOException, ServletException{
String fileName = reports/TestRpt.xml";//我的測(cè)試報(bào)表格式文件
JasperReport jrt = JasperCompileManager.compileReport(fileName);//編譯報(bào)表格式
java.sql.Connection conn = DBBean.getConnection(); //獲取數(shù)據(jù)庫(kù)連接
JasperPrint jpt = JasperFillManager.fillReport(jrt,hs,conn));//填充報(bào)表數(shù)據(jù)生成JasperPrint對(duì)象
response.setContentType("application/octet-stream");
ServletOutputStream ouputStream = response.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(ouputStream);
oos.writeObject(jpt);//將JasperPrint對(duì)象寫(xiě)入對(duì)象輸出流中
oos.flush();
oos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
然后編寫(xiě)一個(gè)客戶端Applet,通過(guò)對(duì)上面Servlet的請(qǐng)求獲得該JasperPrint對(duì)象,并調(diào)用JasperPrintManager方法進(jìn)行打印:
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參數(shù)中獲得報(bào)表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);//發(fā)送對(duì)象請(qǐng)求,獲得JasperPrint對(duì)象
System.out.println(obj);
JasperPrintManager.printReport((JasperPrint)obj, true);//調(diào)用方法打印所獲得的JasperPrint對(duì)象
}catch(Exception e){
e.printStackTrace();
}
}
}
}
另外簡(jiǎn)單寫(xiě)一個(gè)測(cè)試html來(lái)調(diào)用以上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="測(cè)試打印" onclick="openApp();">
</body>
</html>
這樣,在客戶端訪問(wèn)JRPrintTest.html頁(yè)面,點(diǎn)擊"測(cè)試打印"按鈕,就能夠直接在客戶端打印機(jī)上打印出所要的報(bào)表。
