起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 21703|回复: 17

在报表中显示图片

  [复制链接]

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
发表于 2012-10-18 16:24:59 | 显示全部楼层 |阅读模式
在报表设计器中,选中要显示图片的单元格,设置属性display-type为image
只要字段中的内容是一个图片的url,就可以显示出这个图片了。

1、显示文件系统中的图片
select X5_WPXX.fWPDM as fWPDM,X5_WPXX.fWPMC as fWPMC,X5_WPXX.fGG as fGG,'/UI/system/images/report/export_pdf.gif' as fDW from X5_WPXX X5_WPXX
报表中fDW列,就可以显示图片了

2、显示数据库中的图片(使用blobImage上传的)
存图片的字段里面的内容是二进制格式的,需要通过写java代码调用blobDownloadAction获得数据库中存储的图片的url,因此reportData不能使用KSQLAction,要使用Action。下面是java代码完整案例。

  1. import java.io.File;
  2. import java.io.FileOutputStream;
  3. import java.io.InputStream;
  4. import java.util.Iterator;

  5. import com.justep.system.action.ActionUtils;
  6. import com.justep.system.data.KSQL;
  7. import com.justep.system.data.Row;
  8. import com.justep.system.data.Table;

  9. public class Buy {

  10.         protected static String addBsessionid(String url) {
  11.                 String bessionid = ActionUtils.getRequestContext().getSessionContext().getSessionID();
  12.                 if (url.contains("?")) {
  13.                         return url + "&bsessionid=" + bessionid;
  14.                 } else {
  15.                         return url + "?bsessionid=" + bessionid;
  16.                 }
  17.         }

  18.         public static Table rpt() {
  19.                 Table t = KSQL.select("select ER_WPXX.* from ER_WPXX ER_WPXX", null, "/erp/buy/data", null);

  20.                 Iterator<Row> it = t.iterator();
  21.                 while (it.hasNext()) {
  22.                         Row r = it.next();
  23.                         try {
  24.                                 String url = "/UI/system/service/common/bizAction.j?"
  25.                                         + "dataModel=/erp/buy/data"                        //数据模块目录
  26.                                         + "&concept=ER_WPXX"                               //概念名
  27.                                         + "&relation=fBlob"                                //关系名
  28.                                         + "&id=" + r.getValue("ER_WPXX")                   //行ID
  29.                                         + "&process=/erp/buy/process/goods/goodsProcess"   //流程名称
  30.                                         + "&activity=mainActivity"                         //环节名称
  31.                                         + "&action=blobDownloadAction"                     //调用的Action
  32.                                         + "&$query-version=" + com.justep.system.util.CommonUtils.createGUID();
  33.                                 r.setString("fGG", addBsessionid(url)); //将url存入table对象
  34.                         } catch (Exception e) {
  35.                                 // TODO Auto-generated catch block
  36.                                 e.printStackTrace();
  37.                         }
  38.                 }
  39.                 return t;
  40.         }
  41. }
复制代码
3、显示文档服务器中的图片
存图片的字段里面的内容是JSON格式的,需要将其改为图片的url,这个改变通过写java代码实现,因此reportData不能使用KSQLAction,要使用Action。下面是java代码完整案例。

  1. import java.util.Iterator;
  2. import org.json.JSONArray;
  3. import org.json.JSONObject;
  4. import com.justep.doc.DocAdapter;
  5. import com.justep.system.action.ActionUtils;
  6. import com.justep.system.data.KSQL;
  7. import com.justep.system.data.Row;
  8. import com.justep.system.data.Table;
  9. import com.justep.util.Utils;

  10. public class Rich {
  11.         
  12.         protected static String addBsessionid(String url) {
  13.                 String bessionid = ActionUtils.getRequestContext().getSessionContext().getSessionID();
  14.                 if (url.contains("?")) {
  15.                         return url + "&bsessionid=" + bessionid;
  16.                 } else {
  17.                         return url + "?bsessionid=" + bessionid;
  18.                 }
  19.         }

  20.         public static Table reportPic() throws Exception{
  21.                 Table t = KSQL.select("select X5_WPXX.* from X5_WPXX X5_WPXX", null, "/x5demo/rich/data", null);
  22.                 Iterator<Row> it = t.iterator();
  23.                 while (it.hasNext()){
  24.                         Row r = it.next();
  25.                         String v = r.getString("fGG");//取出图片字段
  26.                         if(!Utils.isEmptyString(v)){
  27.                                 JSONArray ja = new JSONArray(v);
  28.                             JSONObject jsonObject = ja.getJSONObject(0);
  29.                             String docPath = jsonObject.getString("docPath");
  30.                             String fileID = jsonObject.getString("fileID");

  31.                                 try {
  32.                                         String urlPattern = "/repository/file/view/"+fileID+"/last/content";
  33.                                         String url = addBsessionid(DocAdapter.queryNoPermissionHost(true, docPath, urlPattern, true)); //通过docPath和fileID获得图片的url
  34.                                         r.setString("fGG", url); //将url存入table对象
  35.                                 } catch (Exception e) {
  36.                                         // TODO Auto-generated catch block
  37.                                         e.printStackTrace();
  38.                                 }
  39.                         }
  40.                 }
  41.                 return t;
  42.         }
  43. }
复制代码
上面的代码中引用了import com.justep.doc.DocAdapter;
因此该java文件所在的code目录需要引用SA/doc/logic/code
调试时,如果把该java文件所在的dsrc目录设置为源码路径,那么也需要将SA/doc/logic/code/src目录设置为源码路径,否则会报无法解析导入com.justep.doc

80

主题

320

帖子

773

积分

高级会员

Rank: 4

积分
773
QQ
发表于 2014-6-16 09:56:25 | 显示全部楼层
问下,这句话是固定格式的还是自己程序中设置的?
String urlPattern = "/repository/file/view/"+fileID+"/last/content";
匿名  发表于 2016-1-29 10:31:59
我按照LZ说的但是那个包错了com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;  只有这两个包 找不到org的  这个怎么解呢?

35

主题

153

帖子

153

积分

初级会员

Rank: 2

积分
153
发表于 2012-11-21 00:32:03 | 显示全部楼层
两种方式都不能控制图片大小吗?

41

主题

216

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
QQ
发表于 2013-7-20 11:31:00 | 显示全部楼层
没太看懂
一二三四五,上山打老虎

8

主题

75

帖子

375

积分

中级会员

Rank: 3Rank: 3

积分
375
QQ
发表于 2014-11-5 11:15:00 | 显示全部楼层
如果控制图片大小,图片太大。打印显示不全,如何处理???????

59

主题

264

帖子

386

积分

中级会员

Rank: 3Rank: 3

积分
386
QQ
发表于 2014-12-11 22:10:06 | 显示全部楼层
有从头到尾的例子的,这样看不懂啊!

53

主题

313

帖子

1138

积分

金牌会员

Rank: 6Rank: 6

积分
1138
QQ
发表于 2015-3-11 11:33:20 | 显示全部楼层
关注中!
点评回复

使用道具 举报

154

主题

473

帖子

908

积分

高级会员

Rank: 4

积分
908
QQ
发表于 2015-7-10 16:03:06 | 显示全部楼层
看不懂。
点评回复

使用道具 举报

154

主题

473

帖子

908

积分

高级会员

Rank: 4

积分
908
QQ
发表于 2015-7-11 10:32:22 | 显示全部楼层
为什么我照此配置出来的action返回来的table没有数值啊。System.out.println(new com.justep.system.transform.Table2Row().transform(t,null).asXML());我把table打印出来
<rows><userdata name="model">/dqgl/qayqgygl/data</userdata><userdata name="userdata">whereVersion</userdata><userdata name="relations">DQ_QQYHDJ,DQ_QQYHDJ.version,DQ_QQYHDJ.fFXR,DQ_QQYHDJ.fFXRBH,DQ_QQYHDJ.fYHMS,DQ_QQYHDJ.fCLJY,DQ_QQYHDJ.fZRBM,DQ_QQYHDJ.fZRBMBH,DQ_QQYHDJ.fZGRQ,DQ_QQYHDJ.fBMSHYJ,DQ_QQYHDJ.fAJBYJ,DQ_QQYHDJ.fZGWCQK,DQ_QQYHDJ.fBZ,DQ_QQYHDJ.fFJ</userdata><userdata name="relation-types">String,Integer,String,String,Text,Text,String,String,Date,String,Text,String,Text,Blob</userdata><userdata name="relation-alias">DQ_QQYHDJ,version,fFXR,fFXRBH,fYHMS,fCLJY,fZRBM,fZRBMBH,fZGRQ,fBMSHYJ,fAJBYJ,fZGWCQK,fBZ,fFJ</userdata></rows>

154

主题

473

帖子

908

积分

高级会员

Rank: 4

积分
908
QQ
发表于 2015-7-11 21:09:43 | 显示全部楼层
kenny1217 发表于 2015-7-11 10:32
为什么我照此配置出来的action返回来的table没有数值啊。System.out.println(new com.justep.system.transf ...

我的问题解决了,不会用KSQL,我换成sql的方法了
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-11-24 07:30 , Processed in 0.071760 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表