集智平台API设置报表背景图
一些客户开发报表要到给报表动态设置背景图,背景图可能是一些从数据库中存储的图片,从数据库中把这些图片查出来,然后动态的设置为某些报表的背景图。由于设计器中只能指定固定的图片,没办法动态的设置,也不能用到数据库中存储的图片,所以这个功能要靠api来实现。
用api来实现报表的背景图需要实现润乾api的IBackGraphGenerator接口,重写generate(Context arg0, BackGraphConfig arg1)方法,最后返回一个BufferedImage对象。下面就用一个例子来实现用api自定义报表的背景图。
第一步:连接数据库,并从数据库中取出图片。
首先要连接数据库,然后从数据库中将图片查出来,再将图片解析成BufferedImage类型。如上面所说自定义报表背景图需要实现润乾api的IBackGraphGenerator接口,重写generate(Context arg0, BackGraphConfig arg1)方法。
以demo数据库的雇员表里面照片为例,将照片设置成报表的背景图,api代码如下所示:
package com.zhengzhong.practise;
import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import com.runqian.report4.usermodel.BackGraphConfig;
import com.runqian.report4.usermodel.Context;
import com.runqian.report4.usermodel.IBackGraphGenerator;
import java.sql.*;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageInputStream;
public class Graphic implements IBackGraphGenerator{
public BufferedImage generate(Context arg0, BackGraphConfig arg1) {
// TODO Auto-generated method stub
String driver=”org.hsqldb.jdbcDriver”;
String url=”jdbc:hsqldb:hsql://localhost/runqianDB”;
String user=”sa”;
String passwd=”";
String sql=”SELECT 雇员.照片 FROM 雇员”;
BufferedImage bi=null;
try {
Class.forName(driver);
Connection conn=DriverManager.getConnection(url,user,passwd);
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(sql);
System.out.println(“rsrsrsrsrsrsrsrsrsrs=”+rs);
rs.next();
InputStream is = rs.getBinaryStream(1);
System.out.println(“>>>>>>>>>>>>>>>>>>>>>>>>>>>”+is);
bi = ImageIO.read(is);
System.out.println(“============================”+bi);
catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bi;
}
}
第二步:在报表中使用自己定义的背景图。
将上面的类连同包一起放到designer\web\WEB-INF\classes\ 路径下(这里是为了在设计器中预览看到效果,如果在web应用中请放到应用的WEB-INF\classes\ 路径下)。