從零開始認(rèn)識(shí) JasperReport + IReport (JasperReport部分)
因參與公司南非的項(xiàng)目,需要應(yīng)用在Linux平臺(tái),所以報(bào)表改用JasperReport.國內(nèi)的項(xiàng)目報(bào)表還是用FastReport(看來還是結(jié)晶啊).
廢話少說,我從delphi平臺(tái)轉(zhuǎn)到RCP開發(fā)才不過兩月時(shí)間,以前從未接觸過JasperReport.(簡稱為JR)
今天上級(jí)要求熟悉JR,為節(jié)后國際化報(bào)表做準(zhǔn)備.以下為我從0開始的一些記錄.
目的: 力求理解JasterReport的各個(gè)概念及之間的關(guān)系.熟悉打印報(bào)表流程的來龍去脈,主要的調(diào)用方法(如加載報(bào)表,打印,預(yù)覽).
報(bào)表設(shè)計(jì)器的使用.
1. IReport 設(shè)計(jì)器,就像FastReport一樣有這樣的設(shè)計(jì)器.但名字叫IReprot,為安裝文件,我安裝的版本為
廢話少說,我從delphi平臺(tái)轉(zhuǎn)到RCP開發(fā)才不過兩月時(shí)間,以前從未接觸過JasperReport.(簡稱為JR)
今天上級(jí)要求熟悉JR,為節(jié)后國際化報(bào)表做準(zhǔn)備.以下為我從0開始的一些記錄.
目的: 力求理解JasterReport的各個(gè)概念及之間的關(guān)系.熟悉打印報(bào)表流程的來龍去脈,主要的調(diào)用方法(如加載報(bào)表,打印,預(yù)覽).
報(bào)表設(shè)計(jì)器的使用.
1. IReport 設(shè)計(jì)器,就像FastReport一樣有這樣的設(shè)計(jì)器.但名字叫IReprot,為安裝文件,我安裝的版本為
iReport-3.0.0-windows-installer.exe,同事傳我的,下載地址百度下下就有了.
2. JasperReport為一個(gè)開發(fā)Jar包,就是相當(dāng)于FastReport的報(bào)表控件.
3. 初始化JasterReport
2. JasperReport為一個(gè)開發(fā)Jar包,就是相當(dāng)于FastReport的報(bào)表控件.
3. 初始化JasterReport
private static JasperPrint initJasperReport(String fileName,
Map<String, Object> paramMap, List data) throws IOException,
MalformedURLException, JRException {
...
InputStream is = fullPathString.toURL().openStream(); //這句以上代碼都是處理報(bào)表文件路徑
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(is);
Object[] objArray = data.toArray();
//JasperReport對(duì)象 + Map對(duì)象 + List 對(duì)象 =JasperPrint對(duì)象 final JasperPrint jasperPrint = JasperFillManager.fillReport(
jasperReport, paramMap, new JRBeanArrayDataSource(objArray));
return jasperPrint;
}
4.查找默認(rèn)打印機(jī)(打印服務(wù)).
MalformedURLException, JRException {
...
InputStream is = fullPathString.toURL().openStream(); //這句以上代碼都是處理報(bào)表文件路徑
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(is);
Object[] objArray = data.toArray();
//JasperReport對(duì)象 + Map對(duì)象 + List 對(duì)象 =JasperPrint對(duì)象
jasperReport, paramMap, new JRBeanArrayDataSource(objArray));
return jasperPrint;
}
4.查找默認(rèn)打印機(jī)(打印服務(wù)).
public static boolean directPrintByPrintName(final JasperPrint jasperPrint) {
if (jasperPrint != null) {
try {
PrintService[] PSs = PrinterJob.lookupPrintServices(); //java.awt.*包.查找所有打印服務(wù).
PrintService ps = null;
if (PSs != null && PSs.length > 1&& !Assert.isNull(MzTransParam.PrinterOfSyddyj)) {
for (int i = 0; i < PSs.length; i++) {
String sps = PSs[i].toString();
sps = sps.replace("Win32 Printer : ", ""); //$NON-NLS-1$ //$NON-NLS-2$
ps = PSs[i];//得到打印服務(wù)對(duì)象
break;
}
}
}
5.設(shè)置打印參數(shù),好多個(gè)參數(shù)
未完.if (jasperPrint != null) {
try {
PrintService[] PSs = PrinterJob.lookupPrintServices(); //java.awt.*包.查找所有打印服務(wù).
PrintService ps = null;
if (PSs != null && PSs.length > 1&& !Assert.isNull(MzTransParam.PrinterOfSyddyj)) {
for (int i = 0; i < PSs.length; i++) {
String sps = PSs[i].toString();
sps = sps.replace("Win32 Printer : ", ""); //$NON-NLS-1$ //$NON-NLS-2$
//MzTransParam.PrinterOfSyddyj 我們系統(tǒng)設(shè)置的默認(rèn)打印機(jī)名稱.
if (sps.equalsIgnoreCase(MzTransParam.PrinterOfSyddyj)) { ps = PSs[i];//得到打印服務(wù)對(duì)象
break;
}
}
}
5.設(shè)置打印參數(shù),好多個(gè)參數(shù)
if (ps != null) {
long start = System.currentTimeMillis();
PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
printRequestAttributeSet.add(MediaSizeName.ISO_A5);// 處方模板是A5紙 第一個(gè)參數(shù)對(duì)象
PrintServiceAttributeSet printServiceAttributeSet = new HashPrintServiceAttributeSet();
printServiceAttributeSet.add(new PrinterName(ps.getName(),null)); //第二個(gè)參數(shù)對(duì)象
final JRPrintServiceExporter exporter = new JRPrintServiceExporter(); //關(guān)鍵的對(duì)象,其它的對(duì)象都是為他服務(wù)的
//以下為設(shè)置參數(shù)
exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET,
printRequestAttributeSet);
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET,
printServiceAttributeSet);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG,
Boolean.FALSE);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG,
Boolean.FALSE);
6.關(guān)鍵的出場,在線程里導(dǎo)出報(bào)表.(打印)
long start = System.currentTimeMillis();
PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
printRequestAttributeSet.add(MediaSizeName.ISO_A5);// 處方模板是A5紙 第一個(gè)參數(shù)對(duì)象
PrintServiceAttributeSet printServiceAttributeSet = new HashPrintServiceAttributeSet();
printServiceAttributeSet.add(new PrinterName(ps.getName(),null)); //第二個(gè)參數(shù)對(duì)象
final JRPrintServiceExporter exporter = new JRPrintServiceExporter(); //關(guān)鍵的對(duì)象,其它的對(duì)象都是為他服務(wù)的
//以下為設(shè)置參數(shù)
exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET,
printRequestAttributeSet);
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET,
printServiceAttributeSet);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG,
Boolean.FALSE);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG,
Boolean.FALSE);
6.關(guān)鍵的出場,在線程里導(dǎo)出報(bào)表.(打印)
Thread thread = new Thread(new Runnable() {
public void run() {
try {
exporter.exportReport(); //就這么一句.exporter對(duì)象導(dǎo)出報(bào)表.
} catch (Exception ex) {
System.err.println(ex.getLocalizedMessage());
}
}
});
thread.start();
7.采用默認(rèn)打印.public void run() {
try {
exporter.exportReport(); //就這么一句.exporter對(duì)象導(dǎo)出報(bào)表.
} catch (Exception ex) {
System.err.println(ex.getLocalizedMessage());
}
}
});
thread.start();
} else { //此處的else接的是5條的if
Thread thread = new Thread(new Runnable() {
public void run() {
try {
//jasperPrint 對(duì)象就是JasperPrintManager生成的.參考上面的代碼.
JasperPrintManager.printReport(jasperPrint,false); //這一句應(yīng)該是默認(rèn)打印.
} catch (Exception ex) {
}
}
});
thread.start();
}
} catch (Exception ex) {
return false;
}
}
return true;}
Thread thread = new Thread(new Runnable() {
public void run() {
try {
//jasperPrint 對(duì)象就是JasperPrintManager生成的.參考上面的代碼.
JasperPrintManager.printReport(jasperPrint,false); //這一句應(yīng)該是默認(rèn)打印.
} catch (Exception ex) {
}
}
});
thread.start();
}
} catch (Exception ex) {
return false;
}
}
return true;}
posted on 2011-09-09 07:49 嘰哩咕嚕 閱讀(3995) 評(píng)論(3) 編輯 收藏