展现报表

分页

PageBuilder pb = null;

IReport  iReport =......;  //计算报表的相关代码,获得一个IReport

pb = new PageBuilder(iReport,800,100);  //对报表进行分页,PageBuilder还有别的构造方法

int currentPage=......;  //获得当前页号

IReport iReporTemp = pb.getPage(currentPage);  //根据当前页号返回当前页对象

String htmlText = ReportUtils.toHTMLString(iReporTemp,"report2",request);  //把当前页对象输出html语法

out.println(htmlText);  //输出html语法至网页

 

输出到网页

String htmlText = ReportUtils.toHTMLString(iReport,"report1",request);  //生成html语法

out.print(htmlText);  //输出报表到网页

 

缓存

背景说明:

润乾报表提供了先进的缓存机制,正常的使用中,tag标签自动进行处理。如果调用API接口计算报表,如何使用缓存呢?

 

代码示例1

Context ctx = new Context();

ctx.setMainDir("C:\\......\\reportFiles\\ ");  //报表模板的存放路径

CacheManager manager = CacheManager.getInstance();  //获取系统缓存管理器

manager.setCachePath("C:\\Temp");  //设置缓存报表在硬盘中的存放路径

//manager.setCompressMode(false);  // 默认压缩,压缩主要是为了提高存盘效率

//manager.setRealtimeReload(true);  // 设置实时读取报表定义, 默认不实时读取报表定义

ReportCache rc = manager.getReportCache("1.rpx", ctx, 0);  //把报表模板名赋给缓存管理器,系统即自动加载该报表,并建立一系列的缓存管理机制

IReport report = rc.getReport(ctx);  //从缓存中获取报表对象

 

代码示例2

String reportFile = “C:/api/reportFiles/wangge.rpx”;  //必须为绝对路径

ReportDefine rd = (ReportDefine)ReportUtils.read( reportFile );

//......   //其它代码,例如对rd动态设置一系列属性等

CacheManager manager = CacheManager.getInstance();  //获取系统缓存管理器

//.................  //其它代码,例如对manager设置各种属性等

ReportEntry re=manager.cacheReportDefine("reportName", rd);  //ReportDefine赋给缓存管理器

Context ctx = new Context();  //构建报表运算环境

//......   //其它代码,例如对ctx设置各种属性等

long timeout=10000;

ReportCache rc=re.getReportCache(ctx, timeout); 

IReport report = rc.getReport(ctx);  //从缓存中获取报表对象

 

 

代码示例3

Context cxt = new Context();  //构建报表引擎计算环境

//.......................... //其它辅助代码,例如往报表引擎传递参数,传递数据库连接参数等

ReportDefine rd = (ReportDefine)ReportUtils.read( reportFile );

Engine engine = new Engine(rd, cxt);  //构造报表引擎

IReport iReport = engine.calc();  //运算报表

CacheManager manager = CacheManager.getInstance();  //获取系统缓存管理器

//.................   //其它代码,例如对manager设置各种属性等

ReportCache rc=manager.cacheReport("reportName",iReport);  //将结果报表缓存起来

String cacheId=rc.getId();  //取报表缓存号,以便下次从缓存中调用时利用该号获取缓存报表

 

 

swing中展现

背景说明:

java应用有不少是C/S的模式,在C/S的模式下,同样可以调用API接口运算报表,并且把结果报表在JFrame窗口中进行展现,还可以进行打印。

 

代码示例:

ExtCellSet.readLicense(xml); //设置润乾报表授权文件

//................  //其它代码

IReport iReport = ......;  //运算代码,获得一个IReport对象

CSReport csReport = new CSReport(iReport);  //构造CSReport控件

JFrame jf = new JFrame("润乾报表");  //构造JFrame界面

jf.getContentPane().add(csReport.getDisplayPane());  //设置JFrame的相关属性并展现

jf.setSize(600, 400);

jf.setLocation(200, 100);

jf.show();

//................  //其它代码

//csReport.print();  //打印,该代码可以写在某个按钮的相关事件中

注意:

如下情况也需要通过API设置授权:

1.  不重启服务器,在应用正常运行过程中,修改授权文件,则不会自动重新装载,此时需要调用API手动设置授权

2.  C/S应用中,没有授权文件的配置机制,此时必须调用API接口,进行装载

参考文件:CalculateReport.java

 

◆ 自定义Swing报表打印属性

背景说明:

 基于Swing开发项目的用户,不仅仅满足于把结果报表在JFrame窗口中展现、打印,他们还希望自己能够设置从指定页打印、指定范围页打印,调整页面的页边距,细化打印比例,调整默认的打印显示比例等等以实现灵活的进行打印。为了满足用户的需求润乾报表提供了报表打印对话框API供用户调用以实现以上功能。

 

代码示例:

IReport iReport = ......;  //运算代码,获得一个IReport对象

CSReport csReport = new CSReport(iReport);  //构造CSReport控件

JFrame jf = new JFrame("润乾报表");  //构造JFrame界面

jf.getContentPane().add(csReport.getDisplayPane());  //设置JFrame的相关属性并展现

......

PrintFrame pf=new PrintFrame(iReport,jf); //定义一个报表打印对话框类对象

pf.setColumns(2);  //设置报表的分栏数为2

//pf.setPrintablePages(2);  //设置要打印的页号为:2

pf.setPrintablePages(2,6);  //设置要打印的页号范围为:2页到第6

……

关于PrintFrame包含的方法介绍请参考打印

 

计算字间距

背景说明:

由于不同的字体与字号对应不同的浏览器字间距不同。导致web端展现与报表出现误差。调用此方法可调整字间距。需在raqsoftConfig.xml中进行配置,指定用户这个类的名称(包括包名)。

代码示例:

package api;

import com.raqsoft.report.usermodel.ILetterSpacing;

public class LetterSpacing implements ILetterSpacing

{

int browser;//浏览器

String font;// 字体名称

int fontSize;// 字体大小,单位象素

int cellWidth;// 单元格大小,单位象素 

public int calc(int browser, String font, int fontSize, int cellWidth)

{

//浏览器为IE

if(browser==0){

if(font=="宋体"||fontSize%2==0){

return 0;

}

if(font!="宋体"||fontSize%2==1){

return -1;

}

}else{

//其他浏览器

return 0;

}

return 0;

}

}

参考文件:LetterSpacing.java