遊客:  註冊 | 登錄 | 幫助





標題: [求助] Java Printing
  小神     Rank: 4Rank: 4
水中藍
性別 保密
UID 11831

精華 0
帖子 2634
積分 1386   詳情

閱讀權限 50
註冊 2006-9-12
來自 天堂
狀態 離線

 
 
 
 
發表於 2007-12-13 07:34 AM  資料  個人空間  短訊  加為好友 
回復 #10 mickeyGoUp 的帖子

thanks mickey..

咁如果係用java bean 呢?
其實雖然d data 係store o向xml..
但係o向print 之前應該會load 晒入個program 度..

如果用java bean 係點ar?

頂部

  小神     Rank: 4Rank: 4
水中藍
性別 保密
UID 11831

精華 0
帖子 2634
積分 1386   詳情

閱讀權限 50
註冊 2006-9-12
來自 天堂
狀態 離線

 
 
 
 
發表於 2007-12-20 09:13 AM  資料  個人空間  短訊  加為好友 
我用ireport set 緊個data source..
我打算用collection of javabeans
咁我就寫左一個好簡單o既factory class:

QUOTE:
public class ReportDataFactory {

    public static Collection generateCollection() {
        Vector collection = new Vector();
        collection.add(new Integer(1));
        collection.add(new Integer(2));
        return  collection;
    }
   
}

但係o向ireport 度佢話有unexpected error..
個classpath 應該冇問題..
咁重會有乜error 呢?

頂部

mickeyGoUp     Rank: 7Rank: 7Rank: 7
版主
性別 男
UID 5

精華 0
帖子 35511
積分 5235   詳情

閱讀權限 150
註冊 2006-3-24
來自 美國滴滴尼
狀態 離線

 
 
 
 
發表於 2007-12-20 11:43 AM  資料  個人空間  短訊  加為好友 
我覺得唔好用 factory class,而係用 xml 做 data source 先,咁起碼少左一層出錯既機會。 當 xml data source 可以成功 display 響 report 上,之後要轉用 java call 個 report 再 pass Collection of Beans 入去係好容易既。  我地有一個 developer 專砌 report,之後用 XML data source 去 test,成功後就將個 jrxml file 俾我,我就放佢入 project 再 setup bean collection 去 integrate (當然之前要同佢夾定 d field names 係乜啦)。

但如果就咁睇您個 factory class,好似唔應該用 collection of Integer objects 喎,而係應該用 collection of java beans,即例如:

public class Record {
    private String field1;
    private String field2;
    public record() {
      super();
    }
    public record(String field1, String field2) {
      super();
      this.field1 = field1;
      this.field2 = field2;
    }
    public void setField1(String fld1) {
      this.field1 = fld1;
    }
    public String getField1() {
      return this.field1;
    }
    public void setField2(String fld2) {
      this.field2 = fld2;
    }
    public String getField2() {
      return this.field2;
    }
}

public class ReportDataFactory {

    public static Collection generateCollection() {
        Vector collection = new Vector();
        collection.add(new Record("xyz", "abc"));
        collection.add(new Record("yyy", "kkk"));
        return  collection;
    }
   
}

然後您個 report 要加兩個 fields: field1 , field2  。  記住記住,個 field 既 description 都一定要同您個 java bean 入面既 property name 一樣,佢先會 map 到!  e.g.

In Jasper Report, add a new field:
    name: field1
    description: field1

add another field:
    name: field2
    description: field2

Then drag those fields to where you want them to be displayed in your report.   

頂部

  小神     Rank: 4Rank: 4
水中藍
性別 保密
UID 11831

精華 0
帖子 2634
積分 1386   詳情

閱讀權限 50
註冊 2006-9-12
來自 天堂
狀態 離線

 
 
 
 
發表於 2007-12-21 07:26 AM  資料  個人空間  短訊  加為好友 
回復 #13 mickeyGoUp 的帖子

我試過用xml data source 冇問題..
但係轉唔到去用javabeans..
我照copy 你個example..
但係佢出error 話null..

頂部

mickeyGoUp     Rank: 7Rank: 7Rank: 7
版主
性別 男
UID 5

精華 0
帖子 35511
積分 5235   詳情

閱讀權限 150
註冊 2006-3-24
來自 美國滴滴尼
狀態 離線

 
 
 
 
發表於 2007-12-21 07:43 AM  資料  個人空間  短訊  加為好友 
原來係咁。  咁您係點樣將個 collection pass 入去 jasper report 架呢?  

係響您個 application 用 JasperFillManager.fillReport() ?  定係點呢?

我呢個 weekend 得閒 d﹐可以俾 d examples 您。

頂部

  小神     Rank: 4Rank: 4
水中藍
性別 保密
UID 11831

精華 0
帖子 2634
積分 1386   詳情

閱讀權限 50
註冊 2006-9-12
來自 天堂
狀態 離線

 
 
 
 
發表於 2007-12-21 08:01 AM  資料  個人空間  短訊  加為好友 
回復 #15 mickeyGoUp 的帖子

THX~~~

我宜家用緊ireport 整緊個jrxml lor
setting 緊javabean data source connection..
咁我個setting 係咁o既:
factory class: ReportDataFactory
method to call: generateCollection

但係test 果時佢就話unexpected error occur: null

同埋我想問下, javabean 個requirement 係乜?
因為我o向ireport 個report query 度test 果時..
我有個class 有getxx, 同setxx, 但係佢好似都讀唔到..
係咪javabean 唔可以有其他function 除左get 同set 外?
一或所有field 都一定要有get 同set? 因為我個class 有d field 係唔洗print 出黎, 佢地冇set 同get..係咪咁所以detect 唔到?

但係我用上面個record class 就可以 detect 到d field..

頂部

mickeyGoUp     Rank: 7Rank: 7Rank: 7
版主
性別 男
UID 5

精華 0
帖子 35511
積分 5235   詳情

閱讀權限 150
註冊 2006-3-24
來自 美國滴滴尼
狀態 離線

 
 
 
 
發表於 2007-12-21 11:57 AM  資料  個人空間  短訊  加為好友 
只要 jasper report 上面有既 field,java bean 入面都要有 (亦同時要有 getters and setters),而 d field names 亦要一樣。  但相反,java bean 入面有既 fields, jasper report 唔一定需要用到。  

等我遲 d 俾 d sample codes 您直接由您既 application call 個 report,到時就唔洗用 Factory Class 去試,少左一層手續,橫惦之後您都唔會需要個 Factory class,Factory class 只係方便 test it outside the app container,而您已經用 xml data source 達到左個目的,可以開始試總 application 開 jasper report 勒。 開始時您一樣可以 pass in 個 xml data source 入去 (from app to jasper),得左後,再轉用 bean collection 就勁容易!  

頂部

  小神     Rank: 4Rank: 4
水中藍
性別 保密
UID 11831

精華 0
帖子 2634
積分 1386   詳情

閱讀權限 50
註冊 2006-9-12
來自 天堂
狀態 離線

 
 
 
 
發表於 2007-12-24 06:32 AM  資料  個人空間  短訊  加為好友 
好~~~
等我試下先...

頂部

mickeyGoUp     Rank: 7Rank: 7Rank: 7
版主
性別 男
UID 5

精華 0
帖子 35511
積分 5235   詳情

閱讀權限 150
註冊 2006-3-24
來自 美國滴滴尼
狀態 離線

 
 
 
 
發表於 2007-12-24 08:57 AM  資料  個人空間  短訊  加為好友 
Here are the example codes that I extracted from our application.  We have a servlet to launch the report.  I extracted the codes required to generate the jasper report.  You must of course populate the bean (MyJavaBean) first.

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


MyJavaBean bean;
String reportFileName = "C:/TEMP/case/forms/MYREPORT.jasper";
String jrxmlName = "C:/TEMP/case/forms/MYREPORT.jrxml";

//... populate the bean here before proceeding

//bean is ready, fill the report with the bean
JasperPrint jasperPrint9 = null;

JasperCompileManager.compileReportToFile(jrxmlName);

HashMap<String, Comparable> params = new HashMap<String, Comparable>();
//params.put("case_id",new Integer(0)); // need this only if your report accept parameters
                  
ArrayList<MyJavaBean> beanCollection = new ArrayList<MyJavaBean>();
beanCollection.add(bean);
JRBeanCollectionDataSource jrDataSource = new JRBeanCollectionDataSource(beanCollection);

jasperPrint9 = JasperFillManager.fillReport(reportFileName, params, jrDataSource);

// number of copies
int numCopies = 1; //hardcode to 1
for(int i = 0; i< numCopies; i++) {
        subjectPrintList.add( jasperPrint9 );
}

//choose exporter according to the format the user picked
String reportFormat = "PDF"; //hardcode to PDF
JRExporter exporter = new JRPdfExporter();
String contentType = "application/pdf";
String fileExtension = "pdf";
if ("DOC".equals(reportFormat)) {
        exporter = new JRRtfExporter();
        contentType = "applicaetion/msword";
        fileExtension = "doc";
}

exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, subjectPrintList);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, pdfOutput);
exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG, new Boolean(true));
exporter.exportReport();

byte[] results = pdfOutput.toByteArray();

ServletOutputStream outstream = response.getOutputStream();
response.setContentType(contentType);
response.setContentLength(results.length);
response.setHeader("Content-disposition","inline; filename=\"Report." + fileExtension + "\"");
outstream.write(results);


頂部

  小神     Rank: 4Rank: 4
水中藍
性別 保密
UID 11831

精華 0
帖子 2634
積分 1386   詳情

閱讀權限 50
註冊 2006-9-12
來自 天堂
狀態 離線

 
 
 
 
發表於 2008-1-2 07:00 AM  資料  個人空間  短訊  加為好友 
thx...
玩完個假又要做下野:p

咁個jrxml 由xml 轉去用javabean 要改d 乜ar?

頂部

快速美言
           


當前時區 GMT+8, 現在時間是 2024-5-8 09:49 AM

    Powered by Discuz!  © 2001-2007 Comsenz Inc.   
Processed in 0.011239 second(s), 7 queries

清除 Cookies - 聯繫我們 - LIPS Corner 新天藍 - Archiver