海鷗航際

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

          Jasper FAQ-1

          Posted on 2005-01-10 13:16 海天一鷗 閱讀(1761) 評論(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.Doublefield進行相加
          那么就應(yīng)該用如下表達式
          ($F{field1}.doubleValue()+$F{field2}.doubleValue()) 
          而不是
          ($F{field1}+$F{field2}) 
          設(shè)定某個類型為java.lang.Double的初始值是
          應(yīng)該用new java.lang.Double(3)
          而不是3
          其他類型的數(shù)據(jù)也一樣

           

          iReport 0.3.0 不能啟動的問題

           

          注意 iReport 0.3.0 需要JDK 1.4 的版本
          還有用Oracle9的注意了,由于Oracle9自帶的是JDK1.3版本的
          所以可能會導(dǎo)致iReport在啟動時用到Oracle中的JDK而導(dǎo)致無法啟動

           

          如何讓顯示的數(shù)據(jù)自動折行顯示

           

          可以選擇field,-> text filed ->有個框打勾
          strech with overflow 
          關(guān)于此功能的具體應(yīng)用,
          大家可以參看JasperReportsamples -> stretch

           

          jasperreport報表文件輸出到pdf的中文問題

           

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

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

          這樣之后如果還有問題,就是你的數(shù)據(jù)傳送過來的亂碼問題。

           

          初學者實例:在WEB客戶端直接打印JasperReport報表

           

          當我不希望使用JasperReport生成pdfhtml等報表顯示文件到客戶端后再通過相應(yīng)打印功能打印,而想直接在客戶端打印生成的報表時候,我們可以使用JasperPrintManager類里的printReport方法來實現(xiàn)打印。這里我給出我的一個測試實例:
          首先,我在服務(wù)器端的一個Servlet里調(diào)用報表格式文件、填充數(shù)據(jù)生成一個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(); //
          獲取數(shù)據(jù)庫連接
          JasperPrint jpt = JasperFillManager.fillReport(jrt,hs,conn));//
          填充報表數(shù)據(jù)生成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對象,并調(diào)用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參數(shù)中獲得報表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ā)送對象請求,獲得JasperPrint對象
          System.out.println(obj);
          JasperPrintManager.printReport((JasperPrint)obj, true);//
          調(diào)用方法打印所獲得的JasperPrint對象
          }catch(Exception e){
          e.printStackTrace();
          }
          }
          }

          }
          另外簡單寫一個測試html來調(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="
          測試打印" onclick="openApp();">

          </body>
          </html>

          這樣,在客戶端訪問JRPrintTest.html頁面,點擊"測試打印"按鈕,就能夠直接在客戶端打印機上打印出所要的報表。 

           

           

           

           

          Feedback

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

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

          ”,但發(fā)現(xiàn)用這個方法不行,因為客戶端并沒有安裝jasperprint,運行時出錯,那這樣客戶端還必須手動安裝軟件,用APPLET實現(xiàn)也沒意義了,請問有什么好方法不用客戶端做復(fù)雜的操作嗎?

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

          2006-05-16 21:11 by kelo
          怎么不分頁

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

          2006-06-04 20:41 by zhuiyun
          請問jasper-api.jar是什么包啊?

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

          2006-06-07 14:22 by zhuiyun
          我對serlvet在xml中進行定義后,仍后找不到,問什么呢?
          <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>
          在地址欄訪問時,仍然為404錯誤,希望有人解答阿。

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

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

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

          2006-06-08 14:46 by zhuiyun
          為什么都沒有人回答阿
          主站蜘蛛池模板: 彝良县| 通城县| 九龙坡区| 延庆县| 平谷区| 普安县| 阿勒泰市| 长兴县| 临武县| 铜山县| 汉寿县| 建宁县| 红原县| 定陶县| 荥阳市| 敦化市| 凌海市| 玉树县| 新蔡县| 鸡东县| 深泽县| 施甸县| 景德镇市| 满洲里市| 延安市| 田林县| 大港区| 资源县| 同德县| 全南县| 长治县| 永嘉县| 合水县| 太原市| 华阴市| 江口县| 哈巴河县| 青阳县| 瑞安市| 资源县| 莒南县|