◆ 分页
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