海鷗航際

          JAVA站
          posts - 11, comments - 53, trackbacks - 1, articles - 102

          Jasper FAQ-1

          Posted on 2005-01-10 13:16 海天一鷗 閱讀(1761) 評(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.Doublefield進(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)用,
          大家可以參看JasperReportsamples -> stretch

           

          jasperreport報(bào)表文件輸出到pdf的中文問(wèn)題

           

          1、   你確定一下你的classpath下是否有itextitextasia

          2、   確定你的pdf font是否設(shè)置漢字字體如STsong_lightpdf encoding是否是漢字的encoding 

          這樣之后如果還有問(wèn)題,就是你的數(shù)據(jù)傳送過(guò)來(lái)的亂碼問(wèn)題。

           

          初學(xué)者實(shí)例:在WEB客戶端直接打印JasperReport報(bào)表

           

          當(dāng)我不希望使用JasperReport生成pdfhtml等報(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ì)象寫入對(duì)象輸出流中
          oos.flush();
          oos.close();
          } catch (Exception e) {
          e.printStackTrace();
          }

          }


          }

          然后編寫一個(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)單寫一個(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)表。 

           

           

           

           

          Feedback

          # re: Jasper FAQ-1  回復(fù)  更多評(píng)論   

          2006-04-12 11:40 by random
          我現(xiàn)在就想用jasperprint實(shí)現(xiàn)客戶端打印,看了你這篇“初學(xué)者實(shí)例:在WEB客戶端直接打印JasperReport報(bào)表

          ”,但發(fā)現(xiàn)用這個(gè)方法不行,因?yàn)榭蛻舳瞬]有安裝jasperprint,運(yùn)行時(shí)出錯(cuò),那這樣客戶端還必須手動(dòng)安裝軟件,用APPLET實(shí)現(xiàn)也沒意義了,請(qǐng)問(wèn)有什么好方法不用客戶端做復(fù)雜的操作嗎?

          # re: Jasper FAQ-1  回復(fù)  更多評(píng)論   

          2006-05-16 21:11 by kelo
          怎么不分頁(yè)

          # re: Jasper FAQ-1  回復(fù)  更多評(píng)論   

          2006-06-04 20:41 by zhuiyun
          請(qǐng)問(wèn)jasper-api.jar是什么包啊?

          # re: Jasper FAQ-1  回復(fù)  更多評(píng)論   

          2006-06-07 14:22 by zhuiyun
          我對(duì)serlvet在xml中進(jìn)行定義后,仍后找不到,問(wèn)什么呢?
          <servlet>
          <servlet-name>JasperPrintServlet</servlet-name>
          <servlet-class>servlets.JasperPrintServlet</servlet-class>
          </servlet>
          <servlet-mapping>
          <servlet-name>JasperPrintServlet</servlet-name>
          <url-pattern>/servlets/JasperPrintServlet</url-pattern>
          </servlet-mapping>
          在地址欄訪問(wèn)時(shí),仍然為404錯(cuò)誤,希望有人解答阿。

          # re: Jasper FAQ-1  回復(fù)  更多評(píng)論   

          2006-06-08 14:46 by zhuiyun
          請(qǐng)問(wèn)這樣實(shí)現(xiàn)后能在客戶端之間訪問(wèn)嗎?客戶端是否需要jasperreport,是否需要安裝jre,我實(shí)現(xiàn)后,在自己的機(jī)子上沒有問(wèn)題,但是從別的機(jī)子上訪問(wèn)時(shí)會(huì)出現(xiàn)錯(cuò)誤提示,發(fā)生異常,確定后Ie自動(dòng)關(guān)閉。
          能否指導(dǎo)一下,非常感謝!

          # re: Jasper FAQ-1  回復(fù)  更多評(píng)論   

          2006-06-08 14:46 by zhuiyun
          為什么都沒有人回答阿
          主站蜘蛛池模板: 大宁县| 晴隆县| 南和县| 剑川县| 逊克县| 科技| 双城市| 醴陵市| 曲水县| 都江堰市| 大厂| 宜都市| 广丰县| 金乡县| 喜德县| 巴彦县| 尼勒克县| 新化县| 寻甸| 河曲县| 彰化县| 广昌县| 工布江达县| 临湘市| 竹北市| 锦州市| 阆中市| 米林县| 金沙县| 宣武区| 扎兰屯市| 烟台市| 新邵县| 峡江县| 合阳县| 西林县| 汉寿县| 锦州市| 盐山县| 察隅县| 郧西县|