◆输出报表到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