欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
jasperreport開(kāi)發(fā)筆記 -轉載--靈感.靚影


                                      

  1. iReport
  2. 安裝
    1. 下載,解壓iReport 0.4.0 (推薦src版本)
    2. 確認JDK是1.4以上
    3. 把JDK /lib下的tools.jar拷貝到{ireport_home}/lib目錄中
  3. 運行
    1. 對于下載的Binary版本,只能運行/bin/startup.bat
    2. 對于下載的Src版本,可以通過(guò)ant iReport運行(先安裝ant)
    3. 如果運行startup.bat,出現java.lang.NoSuchMethodError錯誤,一般是JDK版本太低。如果確認已安裝了1.4或以上,檢查path系統變量,看看有1.3的JRE是不是排在前面(比如安裝了Oracle的客戶(hù)端,往往有1.3的JRE),如果出現Class Not Found,檢查classpath。對于通過(guò)ant的方式運行,一般都沒(méi)什么問(wèn)題,所以推薦下載src版本
  4. JasperReport 常見(jiàn)問(wèn)題
    1. .jrxml vs .jasper
      • 如果在運行時(shí)載入.jrxml, 那么每次調用還得編譯, 不如預先編譯成.jasper.不過(guò)預先編譯的jasper,必須用同樣版本的JasperReport載入,而且靈活性差些. 不過(guò)對于大部分報表,還是預先編譯成jasper方便
    2. 如果批量編譯jrxml
      • 用Ant很容易解決

         

        .....

         

    3. 如何使用圖片?
      • 很容易,用Image控件就可以了. 在Image Express里面可以用String來(lái)表示圖片的路徑, 或者用InputStream, File對象.不過(guò)不管用File還是String對象, 都不得不用絕對路徑, 這顯然很不靈活. 解決辦法是,穿入一個(gè)$P的參數,表示圖片所在的目錄,然后用$P和文件名拼接出完整的絕對路徑. 更好的方法是用InputStream, 例如this.getClass().getResourceAsStream("logo.jpg") ,這時(shí)只要把圖片放在當前.jasper所在的目錄就可以了,不必考慮什么參數,什么路徑了
    4. 顯示非數據庫字段變量
      • 顯示如運行日期等,可以直接在Text Field里面輸入new java.util.Date(), 然后把Pattern設成如mm/dd/yyyy.
    5. 動(dòng)態(tài)控制某些Field是否顯示
      • 每個(gè)Static Text, Text Field甚至整個(gè)Band的屬性里面都有Print When Expression, 比如設成new Boolean(!$P{isDisplay}.equalsIgnoreCase("yes")), 那么只有當參數display的值為yes的時(shí)候才顯示
    6. 使用Sub Report, 如何使用相對路徑
      • 見(jiàn)1.3, 和使用圖片類(lèi)似, 用InputStream或者傳入參數
    7. Query里面如何使用參數
      • $P!{xxx} 或者 $P{xxx} 后者只能用于類(lèi)似PreparedStatement參數綁定, 而前者可替換Sql的任意部分. 在需要動(dòng)態(tài)排序的時(shí)候, 前者特別有用. 比如 select a,b,c from t order by $P!{orderClause}   不管用$P還是$P!, SQL最終是以PreparedStatement方式執行的, 不必太擔心性能問(wèn)題   注意:參數是不能嵌套的, 比如$P{a} =‘‘$P‘‘   , $P=‘‘value‘‘, 不要指望$P{a}能被替換成‘‘value‘‘
    8. 如何使用圖表(Graph)
      • JasperReport本身沒(méi)有圖表功能, 只有顯示Image的功能(見(jiàn)4.3). iReport里有個(gè)Graph向導, 其實(shí)質(zhì)是通過(guò)jFreeChart生成Image. 更另外, 更直接的做法是放一個(gè)Image控件, Image Express Class設置成java.awt.Image, 在Image Expression里通過(guò)自定義的類(lèi)返回java.awt.Image對象. 例如‘‘GraphProvider.getImage($P{REPORT_DATASOURCE},title, subtitle.....)‘‘.  GraphProvider是自己的類(lèi), public static Image getImage(JRDataSource, ....)
    9. 如果顯示多個(gè)圖表
      • 在一張報表上顯示一個(gè)圖表和顯示多個(gè)圖表是不同的. 假設Query是select name,price,qty from xxx, 第一張圖顯示name-price, 第二張圖顯示name-qty, 如果還是按3.8的方法, 第二張圖根本顯示不出來(lái)! 為什么  因為傳入的是JRDataSource, 而JRDataSource僅僅是對ResultSet的簡(jiǎn)單封裝, 在第一張圖處理完后, 游標已經(jīng)到了eof位置了, 在開(kāi)始處理第二張圖的時(shí)候,就必然拋出游標耗盡的異常! 怎么辦   自己寫(xiě)個(gè)JRDataSourceAdapter, 把JRDataSource對象里面的值預先保存到一個(gè)Collection (相當于一個(gè)Offline的數據集), 然后把這個(gè)Collection傳個(gè)getImage方法. 具體是, 建一個(gè)Variable  mydate, 類(lèi)型是java.util.Map, Calculation Type- System, Initial Value Expression是JRDataSourceAdapter.JRDataSource2Map($P{REPORT_DATA_SOURCE},new String[]{"NAME","PRICE","QTY"},new Class[]{java.lang.String.class,java.lang.Double.class,java.lang.Double.class}), JRDataSource2Map是自己寫(xiě)的一個(gè)Adapter. 然后在Image的Expression里面換成如‘‘GraphProvider.getImage(mydata,title, other params...), 當然得修改getImage方法
  5. Export到Excel的問(wèn)題
    1. 如何去掉報表頭等
      • 直接把不需要的Band刪除(把其高度設為0). 如果僅僅是export到Excel的時(shí)候不需要報表頭, 而輸出到PDF等仍然需要保留, 那么使用print when expression, 見(jiàn)4.4
    2. 如果讓Excel看起來(lái)整齊
      • 不要有空白地方! 首先把所有的Field設成一樣高, 對齊! 把所在Band的高度也設成和Field一樣高, 讓Field正好放入Band. 然后調整Field的寬度, 讓每個(gè)Field都相鄰,沒(méi)有空隙. 最后,記得設置參數: exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,
                            Boolean.TRUE);
    3. 如何保留GridLine
      • 首先, 設置參數exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE); 然后,把每個(gè)Field或者Static Text框的‘‘Transparent‘‘屬性都勾上
    4. 如何使字段名只顯示一次
      • 如果把字段名放在ColumnHead區域, 那么輸出到Excel, 會(huì )每個(gè)Page都顯示一遍. 在設計Report時(shí)候, 一般會(huì )設定Page大小. 然而對于Excel, 這個(gè)Page設定仍然存在,而且往往很討厭, 因為在Excel里, 通常希望得到連續的數據, 然而Jasper仍然會(huì )‘‘自作多情‘‘進(jìn)行分頁(yè). 比如說(shuō), 設計JasperReport的時(shí)候, 設定page size為L(cháng)etter, Portrait, 那么輸出到Excel的時(shí)候每隔大約30行(具體取決于Field的高度), page header, column header, column foot, page foot 會(huì )被重復一次, 而且還附帶一個(gè)高度為0的Excel Row, 表示Page Break的地方. 把字段名放在title band里, 可以解決字段名重復的問(wèn)題, 當然page header也不要顯示了. 如果需要, 可以把title band的print when expression設成只有輸出Excel的時(shí)候才顯示
    5. 為什么Excel里面的數據是從第二行,第B列開(kāi)始顯示的 
      • 因為第一行和第A(yíng)列分別是用來(lái)表示page top margin 和 page left margin的. 對于Excel來(lái)說(shuō), 純粹多余. 解決方法是把page margin 設成0. 不過(guò)如果這個(gè)report還需要以PDF等顯示, 那么設成0就不好看了. 最好能動(dòng)態(tài)的改變page margin. 當然,這個(gè)改變只能在外部(調用Report的地方) 進(jìn)行, 在設計Report的時(shí)候是無(wú)能為力的. 不幸的是, JasperReport類(lèi)居然沒(méi)有setMargin的方法,只有g(shù)etter. 折中的方法只能是reflect了. 代碼示意如下: //use reflect to set the private field of JRBaseReport
                         java.lang.reflect.Field margin = JRBaseReport.class.getDeclaredField(
                                "leftMargin");
                        margin.setAccessible(true);
                        margin.setInt(myRpt, 0);                 margin = JRBaseReport.class.getDeclaredField("topMargin");
                        margin.setAccessible(true);
                        margin.setInt(myRpt, 0);                 margin = JRBaseReport.class.getDeclaredField("bottomMargin");
                        margin.setAccessible(true);
                        margin.setInt(myRpt, 0);
    6. 如何去掉Excel中隱藏的行 
      • 如前說(shuō)述, 由于page break的關(guān)系, Excel中每隔幾十行,就有一個(gè)高度為0的row, 即使把page botom margin設為0, 把page footer去掉都沒(méi)有辦法. 唯一的解決辦法是把page height設為很大. 同5.5一樣, 不得不使用reflect:
        • java.lang.reflect.Field pageHeight = JRBaseReport.class.getDeclaredField(
                                  "pageHeight");
                          pageHeight.setAccessible(true);
                          pageHeight.setInt(myRpt, Integer.MAX_VALUE);
  6. 文檔
    1. 哪里有文檔 
      • JasperReport有份Ultimate Guide, 不過(guò)不是免費的, 和jFreeChart一個(gè)德行. 不過(guò)網(wǎng)上有流傳, 寫(xiě)的還可以, 60多頁(yè), 不過(guò)也沒(méi)詳細到哪里去. 如果下載源代碼版, 那么看看自帶的Demo也不錯. SF的論壇也是問(wèn)問(wèn)題的最好地方
  7. 源代碼 僅供參考(reportProvider--一個(gè)Servlet, GraphProider, JRDataAdapter都是普通類(lèi))

/**
 *

Title: ReportProviderServlet


 *

Description: Servlet to generate Jasper reports


 *

Copyright: Copyright (c) 2004


 *

Company: *****


 * @author zephyr
 * @version 1.0
 */
package xyz;

import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.base.*;
import net.sf.jasperreports.engine.export.*;
import net.sf.jasperreports.engine.util.*;

import org.apache.log4j.*;

import java.io.*;

import java.sql.*;

import java.util.*;

import javax.servlet.*;
import javax.servlet.http.*;


public class ReportProviderServlet extends HttpServlet
{
    private static Logger log = LogManager.getLogger(ReportProviderServlet.class);

    //Initialize: Setup DataSourceManager
    public void init() throws javax.servlet.ServletException
    {
        String prefix = getServletContext().getRealPath("/");
        String file = getInitParameter("data-source-file");

        DataSourceManager.configure(prefix + file);

        log.info("initialized successfully!");
    }

    //Process the HTTP request
    public void service(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
    {
        String reportClass = request.getParameter("reportClass");

        log.debug("Running Report:" + reportClass);

        boolean isExcelFormat = false;

        if (reportClass == null)
        {
            throw new IllegalArgumentException("Jasper Class Unspecified");
        }

        String reportFormat = request.getParameter("reportFormat");

        if (reportFormat == null)
        {
            reportFormat = "jasperPrint";
        }

        try
        {
            JasperReport myRpt = JasperManager.loadReport(this.getClass()
                                                              .getResourceAsStream("/jasperReports/" +
                        reportClass + ".jasper"));

            //set ReprintHeaderOnEachPage=false for Excel Format
            isExcelFormat = reportFormat.equalsIgnoreCase("excel");

            if (isExcelFormat)
            {
                //use reflect to set the private field of JRBaseReport
                //No margin for excel format, max pageHeight
                java.lang.reflect.Field margin = JRBaseReport.class.getDeclaredField(
                        "leftMargin");
                margin.setAccessible(true);
                margin.setInt(myRpt, 0);

                margin = JRBaseReport.class.getDeclaredField("topMargin");
                margin.setAccessible(true);
                margin.setInt(myRpt, 0);

                margin = JRBaseReport.class.getDeclaredField("bottomMargin");
                margin.setAccessible(true);
                margin.setInt(myRpt, 0);

                java.lang.reflect.Field pageHeight = JRBaseReport.class.getDeclaredField(
                        "pageHeight");
                pageHeight.setAccessible(true);
                pageHeight.setInt(myRpt, Integer.MAX_VALUE);

                //Don‘t print group header on each page
                if (null != myRpt.getGroups())
                {
                    for (int i = 0; i < myRpt.getGroups().length; i++)
                    {
                        myRpt.getGroups()[i].setReprintHeaderOnEachPage(false);
                    }
                }
            }

            Map params = new HashMap(10);
            Enumeration enu = request.getParameterNames();

            while (enu.hasMoreElements())
            {
                String key = (String) enu.nextElement();
                params.put(key,
                    request.getParameter(key).toUpperCase().replaceAll("‘", "‘‘"));
                log.debug(key + "=" + request.getParameter(key));
            }

            log.debug("Before Filling");

            OutputStream httpOut = response.getOutputStream();

            Connection conn = DataSourceManager.getConnection(request.getSession());

            JasperPrint rptPnt = JasperManager.fillReport(myRpt, params, conn);

            conn.close();

            if (reportFormat.equalsIgnoreCase("jasperPrint"))
            {
                response.setContentType("application/octet-stream");
                JRSaver.saveObject(rptPnt, httpOut);
            }
            else if (reportFormat.equalsIgnoreCase("pdf"))
            {
                response.setContentType("application/pdf");
                response.setHeader("Content-Disposition",
                    "attachment;filename=\"" + reportClass + ".PDF\"");
                JasperManager.printReportToPdfStream(rptPnt, httpOut);
            }
            else if (reportFormat.equalsIgnoreCase("excel"))
            {
                response.setContentType("application/vnd.ms-excel");
                response.setHeader("Content-Disposition",
                    "attachment;filename=\"" + reportClass + ".XLS\"");

                JRXlsExporter exporter = new JRXlsExporter();

                exporter.setParameter(JRExporterParameter.JASPER_PRINT, rptPnt);
                exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, httpOut);
                exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,
                    Boolean.TRUE);
                exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,
                    Boolean.FALSE);
                exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,
                    Boolean.FALSE);
                exporter.exportReport();
            }
            else if (reportFormat.equalsIgnoreCase("html"))
            {
                JRHtmlExporter exporter = new JRHtmlExporter();
                response.setContentType("text/html");

                Map imagesMap = new HashMap();

                request.getSession().setAttribute("IMAGES_MAP", imagesMap);

                exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP,
                    imagesMap);
                exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,
                    "image.jsp image=");
                exporter.setParameter(JRExporterParameter.JASPER_PRINT, rptPnt);
                exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, httpOut);

                exporter.exportReport();
            }

            log.debug("Report Exported");
        }
        catch (Exception ex)
        {
            log.error("Error Occured", ex);
        }
    }
}

 

 

/**
 *

Title: JRDataSourceAdapter


 *

Description: Converting JRDataSource to Mapped ArrayList


 *

Copyright: Copyright (c) 2004


 *

Company: *****


 * @author zephyr
 * @version 1.0
 */
package xyz;

import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.design.*;

import java.util.*;


public class JRDataSourceAdapter
{
    public static Map JRDataSource2Map(JRDataSource dataSource, String[] fieldNames,
        Class[] fieldClasses) throws JRException
    {
        HashMap result;

        if (fieldNames.length != fieldClasses.length)
        {
            throw new JRException("Number of Field Name & Class unmatch");
        }

        JRDesignField[] fields = new JRDesignField[fieldNames.length];

        result = new HashMap(4);

        for (int i = 0; i < fieldNames.length; i++)
        {
            fields[i] = new JRDesignField();
            fields[i].setName(fieldNames[i]);
            fields[i].setValueClass(fieldClasses[i]);
            result.put(fieldNames[i], new ArrayList());
        }

        do
        {
            for (int i = 0; i < fields.length; i++)
            {
                Object value = dataSource.getFieldValue(fields[i]);
                ((ArrayList) result.get(fields[i].getName())).add(value);
            }
        }
        while (dataSource.next());

        return result;
    }
}

 

/**
 *

Title: GraphProvider


 *

Description: Generate JFreeChart Image


 *

Copyright: Copyright (c) 2004


 *

Company: ****


 * @author zephyr 
 * @version 1.0
 */
package xyz;

import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.design.*;
import net.sf.jasperreports.engine.export.*;

import org.jfree.chart.*;
import org.jfree.chart.axis.*;
import org.jfree.chart.plot.*;

import org.jfree.data.*;

import java.awt.*;
import java.awt.image.*;

import java.io.*;

import java.util.*;


public class GraphProvider
{
    public static Image getImage(Map dataSource, String fieldNameX, String fieldNameY,
        String chartName, String titleX, String titleY, boolean isBarChart, int imageWidth,
        int imageHeight) throws JRException
    {
        JRDesignField fieldX = new JRDesignField();
        fieldX.setName(fieldNameX);
        fieldX.setValueClass(java.lang.String.class);

        JRDesignField fieldY = new JRDesignField();
        fieldY.setName(fieldNameY);
        fieldY.setValueClass(java.lang.Double.class);

        ArrayList periods = (ArrayList) dataSource.get(fieldNameX);
        ArrayList values = (ArrayList) dataSource.get(fieldNameY);

        DefaultCategoryDataset categoryDs = new DefaultCategoryDataset();

        for (int i = 0; i < values.size(); i++)
        {
            Object obj = values.get(i);
            double dataValue = 0;

            if (obj != null)
            {
                dataValue = ((Double) obj).doubleValue();
            }

            categoryDs.addValue(dataValue, null, (String) periods.get(i));
        }

        JFreeChart c = null;

        if (isBarChart)
        {
            c = ChartFactory.createBarChart(chartName, titleX, titleY, categoryDs,
                    PlotOrientation.VERTICAL, false, false, false);
        }
        else
        {
            c = ChartFactory.createLineChart(chartName, titleX, titleY, categoryDs,
                    PlotOrientation.VERTICAL, false, false, false);
        }

        c.getTitle().setFont(new Font("Arial", Font.BOLD, 16));

        NumberAxis axis = (NumberAxis) c.getCategoryPlot().getRangeAxis();
        axis.setAutoRange(true);

        TickUnitSource tickUnits = NumberAxis.createIntegerTickUnits();
        axis.setStandardTickUnits(tickUnits);

        return (c.createBufferedImage(imageWidth, imageHeight));

       }
}

posted on 2004-11-08 05:55 zephyr

- 作者: e-silver 2005年01月21日, 星期五 10:15

Trackback

你可以使用這個(gè)鏈接引用該篇日志 http://publishblog.blogdriver.com/blog/tb.b?diaryID=506727


本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
ireport導出各種格式(pdf,excel,word,html,print)
圖示ireport中使用javabean作數據源開(kāi)發(fā)基于jasperreports報表過(guò)程
利用Ireport和JasperReport實(shí)現導出RTF文件
Spring MVC JasperReport 導出Html格式報表圖片不顯示
Excel file (*.xlsx) Export/Import | SAP Blogs
Java開(kāi)源報表JasperReport、iReport4.5.1使用詳解(三)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久