隨筆-61  評論-13  文章-19  trackbacks-0
          這幾天本人專門對網(wǎng)絡(luò)報表的設(shè)計及打印技術(shù)進行了調(diào)查研究,在網(wǎng)上收集了許多相關(guān)資料,其中 ireport+jasperreport 是許多相關(guān)人士的首推,因此本人對此進行了較詳細(xì)的學(xué)習(xí),下面是本人在學(xué)習(xí) ireport jasperreport 過程中碰到的一些問題及網(wǎng)上摘錄的解決方法,希望大家閱讀此文后會有所收獲。
          1 Jasperreport ireport 簡介:
          ?? JasperReport 是一款報表打印組件,是開放源代碼組織 sf.net 中的一個 java 報表打印工程, JasperReport 的最新版本是 0.5.2 版,最新版本可以從 http://jasperreports.sourceforge.net/index.html 下載得到。
          ??? iReport 也是開源組織 sf.net 中的一款免費軟件,其主要作用是用來以可視化的方式設(shè)計生成 JasperReport 所使用的報表格式文件,因為 JasperReport 本身并未提供很好的可視化報表設(shè)計工具, iReport 的出現(xiàn)正好彌補了這個缺陷。 iReport 的最新版本是 0.3.0
          iReport 可以從 http://ireport.sourceforge.net 下載得到。
          ?
          2 Jasperreport ireport 的安裝及配置:
          Jasperreport 不用另外進行安裝,只需要下載 JasperReport-x.x.x.jar 文件就可以了。 JasperReport 的配置比較簡單,直接將 JasperReport-x.x.x.jar 文件添加到操作系統(tǒng)的環(huán)境變量 ClASSPATH 中即可完成 JasperReport 的配置。
          iReport Windows 平臺也是以 .zip 形式的文件提供的,直接解壓縮后就算完成了安裝。只有 2.x 版的 iReport 需要配置, 3.0 版的 iReport 無需進行任何配置,直接啟動時 ireport.bat 文件就可以了。
          ?
          3 iReport 中文顯示的問題:
          ?? 1 )、當(dāng) iReport 中提示框輸入中文不能正常顯示時,直接將 iReport lib 中的 tinylaf.jar 這個包刪除即可。
            2 )、在 iReport 中運行報表時如果出現(xiàn)亂碼問題時,將 itext-1.02b.jar iTextAsian.jar 這兩個包加到 CLASSPATH 即可。即加入到 C \iReport-0.3.0\lib 目錄中即可。
          3 )、帶有中文顯示的報表:
          任意畫一文本框,雙擊它,在出現(xiàn)的對話框中選擇 Static Text 項,修改 text 內(nèi)容為漢 字,如下所示:
          同時,修改 FONT 項中的內(nèi)容與下圖相同
          改動的地方有三項,一是 font name, 二是 PDF font name 三是 PDF Encoding 再次預(yù)覽報表即可顯示中文報表。 上面修改的第二和第三項在 JRViewer 中是看不出來效果的,如果選擇報表的生成結(jié)果為 PDF 格式則會體現(xiàn)出來。
          ?
          4. 設(shè)置數(shù)據(jù)庫連接
          ?? 選擇“ data source ”菜單中的“ Connections/Datasources ”,在打開的數(shù)據(jù)連接列表窗口 中點擊“ new ”以便新增一個數(shù)據(jù)源, JasperReport 可以使用多種數(shù)據(jù)源,可以是 JDBC 數(shù) 據(jù)庫連接,也可以是從 XML 文件中取數(shù)據(jù)等,以下是使用 ORACLE 中的 CH 數(shù)據(jù)庫做為 數(shù)據(jù)源的一個配置例子。
          ?????????
          上例中是以 ORACLE 做為數(shù)據(jù)庫的一個例子,我們還需要手工復(fù)制 ORACLE JDBC 驅(qū) 動文件到 iReport lib 目錄,復(fù)制 JDBC 驅(qū)動以外需要重新運行 iReport 才會生效。配置好 數(shù)據(jù)源以后,點擊“ Test ”按鈕,如果配置沒有錯誤,應(yīng)該會出現(xiàn)如下所示的內(nèi)容:
          測試數(shù)據(jù)庫連接成功后,點擊“ Save ”按鈕保存這個數(shù)據(jù)源以便完成數(shù)據(jù)源的配置。
          ?
          5 JasperReport 在程序中的應(yīng)用
          ?? 在網(wǎng)上找到 JasperReport 在程序中的應(yīng)用的例子,現(xiàn)摘錄如下:
          1.) Servlet:
          import javax.servlet.*;
          import javax.servlet.http.*;
          import dori.jasper.engine.*;
          import java.io.*;
          import java.util.*;
          import java.sql.*;
          /**
          * @author Administrator
          *
          * To change the template for this generated type comment go to
          * Window>Preferences>Java>Code Generation>Code and Comments
          */
          public class TestReport extends HttpServlet {
          public void doGet(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
          Connection conn = null;
          try {
          Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
          conn =
          DriverManager.getConnection(

          "jdbc:microsoft:sqlserver://192.168.0.10:1433;DatabaseName=am;user=sa;password=sa");
          ServletContext servletContext =this.getServletContext();
          File reportFile = new File(servletContext.getRealPath("test/iteminfo.jasper"));
          Map parameters = new HashMap();
          Integer i=new Integer(8);
          parameters.put("pjId", i);
          byte[] bytes =
          JasperRunManager.runReportToPdf(
          reportFile.getPath(),
          parameters,
          conn);
          response.setContentType("application/pdf");
          response.setContentLength(bytes.length);
          ServletOutputStream ouputStream = response.getOutputStream();
          ouputStream.write(bytes, 0, bytes.length);
          ouputStream.flush();
          ouputStream.close();
          } catch (JRException jre) {
          System.out.println("JRException:" + jre.getMessage());
          } catch (Exception e) {
          System.out.println("Exception:" + e.getMessage());
          }
          }
          public void doPost(
          HttpServletRequest request,
          HttpServletResponse response)
          throws ServletException, IOException {
          doGet(request, response);
          }
          }
          2.) JSP:

          <%@ page contentType="text/html;charset=GBK" %>
          <%@ page import="dori.jasper.engine.*" %>
          <%@ page import="java.util.*" %>
          <%@ page import="java.io.*" %>
          <%@ page import="java.sql.*" %>
          <%
          //數(shù)據(jù)庫連接
          Connection conn=null;
          Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
          conn=DriverManager.getConnection("jdbc:microsoft:sqlserver://192.168.0.10:1433;DatabaseName=am;user=sa;password=
          sa");
          //取到編譯后的jasper文件
          File reportFile = new File(application.getRealPath("test/iteminfo.jasper"));
          //向報表中定義的參數(shù)賦值
          Map parameters = new HashMap();
          Integer i=new Integer(8);
          parameters.put("pjId", i);
          byte[] bytes =
          JasperRunManager.runReportToPdf(
          reportFile.getPath(),
          parameters,
          conn
          );
          response.setContentType("application/pdf");
          response.setContentLength(bytes.length);
          ServletOutputStream ouputStream = response.getOutputStream();
          ouputStream.write(bytes, 0, bytes.length);
          ouputStream.flush();
          ouputStream.close();
          %>
          ?
          3.) 如何將 PDF 格式報表結(jié)果直接輸出到打印機
          ?
          注:這段代碼只能應(yīng)用在 JavaApplication
          public void print() throws UnsupportedFormatException
          {
          save("./tmp.pdf");
          try
          {
          String osName = System.getProperty("os.name");
          //FOR WINDOWS 95 AND 98 USE COMMAND.COM
          if (osName.equals("Windows 95") || osName.equals("Windows 98"))
          {
          Runtime.getRuntime().exec("command.com /C start acrord32 /p " + "./tmp.pdf");
          }
          //FOR WINDOWS NT/XP/2000 USE CMD.EXE
          else
          {
          Runtime.getRuntime().exec("cmd.exe /C Start acrord32 /p " + "./tmp.pdf");
          }
          }
          catch (IOException IOE)
          {
          JOptionPane.showMessageDialog(null, IOE.getMessage(), "RuntimeException",
          JOptionPane.ERROR_MESSAGE);
          }
          }
          ?
          6. 以上是本人在學(xué)習(xí) Jasperreport ireport 中認(rèn)為應(yīng)該注意的及容易碰到的一些問題,許多解決方案是直接從網(wǎng)上摘錄的,另外 Jasperreport ireport 的軟件及一些相關(guān)的學(xué)習(xí)資料,我已經(jīng)將其 COPY 到公司的 SERVER 服務(wù)器暫存盤上我的個人目錄下的網(wǎng)絡(luò)報表設(shè)計子目錄中,大家要是不想自己去下載,可直接到服務(wù)器上去 COPY 一份,同時也希望對大家有所幫助。


          Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=645592

          posted on 2006-11-09 08:59 xnabx 閱讀(292) 評論(0)  編輯  收藏 所屬分類: 2、Web

          06.03.14 小船啟航
          收藏之用。

          個人簡介

          畢業(yè)院系:CUMTB
          工作地點:廣東深圳
          從事方向:Java、Web、SMS
          聯(lián)系電郵:xnabx@tom.com

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          Ajax

          Hibernate

          Java

          數(shù)據(jù)庫

          門戶

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 35534
          • 排名 - 1258

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 土默特左旗| 兴安县| 观塘区| 龙南县| 青河县| 沿河| 万安县| 都匀市| 滕州市| 郓城县| 崇礼县| 德阳市| 黑龙江省| 井陉县| 霞浦县| 上犹县| 松潘县| 阿克苏市| 柞水县| 东乡| 曲麻莱县| 湘乡市| 瑞昌市| 上林县| 平邑县| 东港市| 英超| 墨玉县| 鹰潭市| 贵德县| 扬中市| 奇台县| 黎川县| 新竹市| 江华| 新沂市| 巴中市| 邮箱| 玉山县| 南丹县| 广平县|