ireport参数传递json_API 实例

这篇博客介绍了润乾报表的API使用,包括ireport参数传递json,以及报表的导出到Excel、Excel2007、HTML、PDF、text和Word等格式的方法。此外,还提到了如何将报表插入Word,以及批量插入多个书签内容到Word的操作。同时,展示了报表源文件与JSON之间的转换,并提供了参数值验证的自定义实现。
摘要由CSDN通过智能技术生成

◆输出报表到Excel

ReportUtils.exportToExcel(java.io.OutputStream

os, IReport report, boolean pageBroken);

ReportUtils.exportToExcel(java.io.OutputStream

os, IReport report, boolean pageBroken, int dispRatio);

ReportUtils.exportToExcel(java.lang.String

fileName, IReport report, boolean pageBroken);

ReportUtils.exportToExcel(java.lang.String

fileName, IReport report, boolean pageBroken, int dispRatio);

◆输出报表到Excel2007

ReportUtils.exportToExcel 2007(java.lang.String

fileName,IReport report,boolean pageBroken);

ReportUtils.exportToExcel 2007(java.io.OutputStream

os,IReport report,boolean pageBroken);

◆输出报表到html

ReportUtils.exportToHTML(java.lang.String

fileName, IReport report);

ReportUtils.exportToHTML(java.lang.String

fileName, IReport report, float scale);

ReportUtils.exportToHTML(java.lang.String

fileName, IReport report, java.lang.String encode, float scale);

◆输出报表到PDF

ReportUtils.exportToPDF(java.io.OutputStream

os, IReport report);

ReportUtils.exportToPDF(java.io.OutputStream

os, IReport report, boolean pageBroken, boolean graphicOut);

ReportUtils.exportToPDF(java.lang.String

fileName, IReport report);

ReportUtils.exportToPDF(java.lang.String

fileName, IReport report, boolean pageBroken, boolean graphicOut);

◆输出报表到text

ReportUtils.exportToText(java.io.OutputStream

os, IReport report);

ReportUtils.exportToText(java.io.OutputStream

os,IReport report,boolean exportEmptyHLine);

ReportUtils.exportToText(java.io.OutputStream

os, IReport report, java.lang.String separator, boolean dispValue);

◆输出报表到Word

ReportUtils. exportToDOCX

(java.io.OutputStream os, IReport report);

ReportUtils. exportToDOCX

(java.lang.String fileName,IReport report);

◆输出报表组到文件

ReportUtils.

exportReportGroup (String fileName, ReportGroup rg, Context ctx, byte type, int

ratio);

ReportUtils.

exportReportGroup(OutputStream os, ReportGroup rg, Context ctx, byte type, int

ratio);

◆更加灵活的输出方法:这里仅以Excel为例

ExcelReport er = new

ExcelReport ();

er.export(report);//输出不分页报表,sheet名称自动生成

er.export(sheetName,

report);//输出不分页报表并定义sheet名称

er.export(pb);//输出一个报表的PageBuilder,sheet名称自动生成,按照pb的页数输出多个sheet

er.export(sheetName, pb);//自定义sheet名称输出PageBuilder,如PageBuilder有多页,则系统会自动在sheetName后面加上1、2、3

//以上几种方式可以单独调用,也可以在一个ExcelReport中多次使用各种方式,多次调用时,报表输出

//多个sheet的Excel。

er. saveTo(java.io.OutputStream

os);//输出到文件流

er.saveTo(String filename);//输出到指定文件

//其它几种输出方式类似,只是无定义sheet名称接口。

背景说明:

报表制作完成后,不仅能实现展现及导出等功能,还能够根据用户需求,通过指定模板文件中的书签名称确定插入位置,然后将报表、图片、文本内容插入到新的Word文件中。根据实际业务需求,提供了如下两种方式以供参考。

单个书签内容一一插入Word

try {

//设置报表授权文件

File flic = new File("c:/tmp/report.xml");

FileInputStream lis = new FileInputStream(flic);

Sequence.readLicense( Sequence.P_RPT, lis);

File f = new

File("E:/test.docx");//模板文件

File of =

new File("D:/out.docx");//输出文件

… …

FileOutputStream

fos = new FileOutputStream(of);

DocxChanger dc = new

DocxChanger(f, fos); //实例化DocxChanger

//替换文字

dc.replaceText("标题文字", "润乾报表");

//书签处插入文字

dc.insertText("a",

"Hello world!");

//书签处插入图片文件

File f1 =

new File("d:/a.jpg");

dc.insertImage("b",

f1);

//书签处插入Image对象

BufferedImage

bi = new BufferedImage(100,100,BufferedImage.TYPE_INT_ARGB);

Graphics2D

g = bi.createGraphics();

g.setBackground(……);

… …

dc.insertImage("c",

bi);

//书签处插入报表

File f2 = new

File("d:/product.rpx");

FileInputStream fis =new

FileInputStream(f2);

IReport report =

ReportUtils.read(fis);

fis.close();

Context context = new

Context();

……

Engine engine = new

Engine((ReportDefine) report, context);

report = engine.calc();

dc.insertReport("report1",

report);

//执行所有修改动作,然后关闭输出文件流

dc.execute();

fos.close();

参考文件:InsertWord.java

注意事项:

根据实际情况设计模板文件,保证报表宽度不要超过Word模板的宽度,统计图不要位于分页处,否则会导致显示不全。

多个书签内容一起插入Word

我们可以将文本,Image对象或文件,报表一一插入到Word中,同样,我们也可以将这些对象一次性的插入更新到Word中。那么首先,我们需要将要插入的对象在一个xml文件中配置好,这个xml文件名可以任意取,格式参考下面batch.xml的介绍:

1)batch.xml

该文件中可配置多个书签和插入对象,当对象来源于内存时,可配置成map,通过key从内存中取值,key值可以是IReport、byte[]、Image、String,值的类型程序会自动判断。

version="1.0" encoding="UTF-8"

standalone="yes"?>

file="D:/test.doc">

name="f" type="image" file="D:/test.jpg"/>

name="c" type="text" text="测试的XML specified text."/>

name="a" type="map" key="f"/>

name="b" type="report"

reportFile="D:/student.rpx">

name="arg1" type="value" value="设定参数1"/>

name="arg2" type="map"/>

name="" type="map"

key=""/>

2)同时将多个书签内容插入Word

try{

//输出文件

File of = new

File("D:/out.docx");

……

FileOutputStream fos = new

FileOutputStream(of);

//加载xml,batch.xml内容如所示

String xmlConfig = DocxChanger.xmlFile2String("D:/batch.xml");

//准备环境,加载ide中配置的数据源信息和应用资源路径信息,如加载web端配置信息如下内容可省略

System.setProperty("report.home",

"D:/Program Files/raqsoft/report");

System.setProperty("start.home",

"D:/Program Files/raqsoft/report");

com.raqsoft.report.ide.base.ConfigOptions.load();

GV.dsModel =new

com.raqsoft.report.ide.base.DataSourceListModel();

com.raqsoft.report.ide.RPX.loadDataSources();

Context rootCtx = GV.prepareContext();

Context.setInitCtx(rootCtx);

//设置报表授权文件

File flic = new

File("c:/tmp/report.xml");

FileInputStream lis = new

FileInputStream(flic);

Sequence.readLicense(

Sequence.P_RPT, lis);

//当插入的对象来自内存,比如IReport对象

File f4 = new

File("d:/product.rpx");

FileInputStream fis = new

FileInputStream(f4);

IReport report =

ReportUtils.read(fis);

fis.close();

Context context = new

Context();

…… //假如需要的数据源信息在ide数据源配置中存在,则可省略

Context.setInitCtx(rootCtx);//假如需要的数据源信息在ide数据源配置中存在,则可省略

Engine engine = new

Engine((ReportDefine) report, context);

report = engine.calc();

HashMap map = new

HashMap();

map.put("f",

report); //设置xml中key为f的值

//当插入的对象来自内存,比如String,设置xml中key为arg2的值

map.put("arg2",

"2014-12-15 12:00:23");

DocxChanger.insert(map,

xmlConfig, fos);

fos.close();

} catch (Throwable x) {

x.printStackTrace();

}

参考文件:InsertWords.java

背景说明:

报表制作完成后,不仅可以将计算后的报表导出为各种类型的文件,还可以将计算前的报表源文件导出为.json文件或将.json文件转为.rpx报表源文件。导出.json文件可方便用户批量查找文件中的表达式等操作。

代码示例:

//将报表源文件java对象转成Json串

File f3 = new File("D:/01网格式报表.rpx");

FileInputStream fis = new

FileInputStream(f3);

IReport report =

ReportUtils.read(fis);

fis.close();

String

json=JsonUtil.getJSONString(report);

System.out.print("Json串内容为:"+json);

… …

//从输入流读取json文本,文件字符集必须是UTF-8

File f3 = new File("D:/01网格式报表.json");

FileInputStream fis = new

FileInputStream(f3);

String json=null;

json = JsonUtil.readJson(fis);

System.out.print("Json文件内容为:"+json);

… …

//将指定的目录下的文件,转换到同目录下

String target = "D:/Test";

JsonUtil.transfer(new

File(target));

… …

//将指定的文件或者目录srcFile转换到目标目录targetPath下

String src =

"D:/Test";

String

target = "D:/targetTest";

JsonUtil.transfer(new

File(src),new File(target));

… …

参考文件:RpxtoJsonTest.java

背景说明:

访问报表有时需要验证参数值中是否含有某些特殊字符或者是想要通过限定参数名来实现对部分参数的验证,为满足这类需求润乾报表提供了访问报表时对参数值的校验功能。使用该功能后,访问有参数的报表时则会自动对参数进行验证。

代码示例:

package api;

import

com.raqsoft.report.util.IParamChecker;

/*

*验证报表参数的实现类

*用户可以自定义验证,然后通过WEB-INF/raqsoftConfig.xml配置来加载到项目中

*/

public class DisabledCharChecker

implements IParamChecker{

/*

* @paramName验证的参数名

* @inputValue验证的参数值

*/

public boolean check(String

paramName, String inputValue) {

if(inputValue

== null || inputValue.length() == 0){

return

true;

}

for(int

i = 0; i < disabledCharArr.length; i++){

if(inputValue.indexOf(disabledCharArr[i])

>= 0){

this.cause

= "Sorry,校验未通过," +

paramName + "参数中含有以下字符:" + disabledCharArr[i];

return

false;

}

}

return

true;

}

/*

*验证的返回信息

*/

public String getCause() {

String

tmp = this.cause;

return

tmp;

}

… ...

}

● 注意:

实现润乾报表提供的com.raqsoft.report.util.IparamChecker接口后,需在WEB-INF/raqsoftConfig.xml中添加paramCheckClass属性配置,属性值为类路径:

… …

value="api.DisabledCharChecker"/>

参考文件:DisabledCharChecker.java

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值