[需求]

最近在项目开发过程中,客户要求用Crystal Reports生成pdf格式的报表,并实现自动打印功能。

[实施索引]

1、创建水晶报表;

2、Java中利用报表组件包将报表结果生成pdf;

3、完成自动打印功能。

[详细步骤]

1、创建水晶报表

如果业务要求比较复杂,要先创建临时表和存储过程,假设DB是ORACLE。

1.1、创建临时表

CREATE  global TEMPORARY TABLE  table_name_temporary

(  ......... ) on commit preserve rows;

注:这种方式确保session之间,数据互不干扰。

1.2、创建存储过程

创建包体,包体内声明游标。

根据业务逻辑,将数据保存在临时表中,返回水晶报表所需要的结果集。

1.3、创建水晶报表

以存储过程做为数据源,创建水晶报表。

2、Java中利用报表组件包将报表结果生成pdf

主要步骤如下:

(1)登录CrystalEnterprise;

(2)设置report参数,检索report;

(3)登录DB Server;

(4)输出结果到pdf。

主要代码如下:

IEnterpriseSession enterpriseSession = null;

ReportClientDocument clientDoc = null;

ISessionMgr sessionMgr = CrystalEnterprise.getSessionMgr();

enterpriseSession = sessionMgr.logon(

RAS_ADMINISTRATOR,

RAS_ADMIN_PWD, RASServer,

RAS_SEC);

IInfoStore iStore = (IInfoStore) enterpriseSession

.getService(EAPTPrintConstants.RAS_INFOSTORE);

IReportAppFactory reportAppFactory = (IReportAppFactory) enterpriseSession

.getService(EAPTPrintConstants.RAS_REPORT_FACTORY);

String query = "Select SI_ID From CI_INFOOBJECTS Where SI_NAME = '"

+ reportname + "' And SI_INSTANCE = 0 ";

IInfoObjects result = null;

try {

result = iStore.query(query);

} catch (SDKException e) {

e.printStackTrace();

}

IInfoObject firstResult = (IInfoObject) result.get(0);

clientDoc = reportAppFactory.openDocument(firstResult, 0,

Locale.ENGLISH);

//logon to DataBase

DatabaseController db = clientDoc.getDatabaseController();

// need to transfer arguments

db.logonEx(dbServer, sid, username,

password);

clientDoc.refreshReportDocument();

this.setParameters(clientDoc, map);

ByteArrayInputStream byteIS = (ByteArrayInputStream) clientDoc

.getPrintOutputController().export(ReportExportFormat.PDF);

byte byteArray[] = new byte[byteIS.available()];

FileOutputStream fileOS = new FileOutputStream(filename);

ByteArrayOutputStream byteOS = new ByteArrayOutputStream(byteIS

.available());

int x = byteIS.read(byteArray, 0, byteIS.available());

byteOS.write(byteArray, 0, x);

byteOS.writeTo(fileOS);

byteOS.close();

fileOS.close();

3、完成自动打印功能

(1) 利用Itext技术重新处理pdf,在已生成的pdf里加上以下代码:

String js = "var pp = this.getPrintParams();\n";

js = js + "var fv = pp.constants.flagValues;\n";

js = js + "pp.flags = fv.setPageSize;\n";

js = js + "pp.interactive = pp.constants.interactionLevel.automatic;\n";

js = js + "pp.printerName = \"" + printer + "\";\n";

js = js + "this.print(pp);\n";

(2)jsp中需要IFrame标签,然后自动调用Servlet,在servlet里将pdf输出来,直接输出到打印机上。

posted on 2005-01-18 08:48 Kevin Yao 阅读(1425) 评论(0)  编辑  收藏

java 水晶报表教程_WEB开发中水晶报表的使用心得相关推荐

  1. java 德文转码_web开发中的JAVA字符转码

    二.基本概念 2.1 JAVA中字符的表达 JAVA中有char.byte.String这几个概念. char 指的是一个UNICODE字符,为16位的整数.java抓取网页保存的乱码问题解决 byt ...

  2. java web水晶报表_WEB开发中水晶报表的使用心得

    [需求] 最近在项目开发过程中,客户要求用Crystal Reports生成pdf格式的报表,并实现自动打印功能. [实施索引] 1.创建水晶报表: 2.Java中利用报表组件包将报表结果生成pdf: ...

  3. 【前端实例代码】使用 HTML CSS实现指纹扫描仪特效动画效果 |前端开发 网页制作 基础入门教程 网页开发中常见的样式与特效,收藏起来肯定用的上~

    b站视频演示效果: [web前端特效源码]使用 HTML CSS 和 JavaScript 实现指纹扫描仪特效动画效果 |前端开发 网页制作 基础入门教程 效果图: 完整代码: <!DOCTYP ...

  4. java web开发菜鸟教程_Web开发的入门指导

    你点开此文,说明你对Web开发是有兴趣的,或者你正在思考开始学习Web开发.在这里,我会告诉你成为一名Web开发者的路线,是对初学者关于Web开发的指导.这篇文章不会教你如何写代码,而是指出在你在真正 ...

  5. java遍历对象属性_java开发中遍历一个对象的所有属性并set值 缓存优化

    今天技术之家陪你一起了解java开发中遍历一个对象的所有属性并set值 缓存优化: Java反射 1.创建缓存池,可以加快访问速度private static final Map> CACHE  ...

  6. java opencv bytearray转mat_OpenCV开发中的内存管理问题

    点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 引子 2020年第二篇技术文章,最近比较忙,事情比较多,搞了一个新的系列技术文章,还没有完整的搞好,抽空写一篇 ...

  7. java 逻辑或 作用_Java开发中与之间的区别,你真的知道吗?

    &与&& 首先来讲一下&&,这个在java逻辑运算符里面被称为短路与,它与&逻辑与只差了一个& ,但是区别却很大,它的作用是如果前面的表达式运行 ...

  8. java vector编程_Java编程开发中向量(Vector)及其应用

    要学习Java编程开发中向量及其应用方面的知识就要先了解什么是向量,向量是如何声明及初始化的,下面就让IT培训网专家来给大家详细介绍下如何认识向量及其使用方法吧! 关于向量的介绍: 向量 vector ...

  9. java css路径_java web开发中CSS路径有问题吗,运行jsp文件为什么找不到css文件?...

    ---------------------------------------------------------------------------------------------------- ...

  10. idea java 快捷键_图示Javahtml5开发中IDEA的一些常用默认快捷键

    IDEA全称为IntelliJ IDEA,主要用于以Java语言开发为基础的集成环境,也可以用于诸如html5之类与Java Web系列相关的语言或框架开发:IntelliJ IDEA在编写代码时有一 ...

最新文章

  1. 如何学习网络协议(学习笔记)
  2. [BZOJ2326] [HNOI2011] 数学作业 (矩阵乘法)
  3. 腾讯的一笔画游戏--巧妙解法
  4. 【bzoj1565】[NOI2009]植物大战僵尸 【网络流】【最大权闭合子图】
  5. springboot幂等性_请问,springboot项目支付接口设计,如何保证支付的幂等性,并能给前端反馈友好的提示?...
  6. windows下成功安装XGBOOST
  7. Jcreator教程
  8. 图形验证码实现(代码)
  9. SQL基础教程学习第一站:PostgreSQL下载安装以及如何创建并登录数据库
  10. java实现令牌桶算法
  11. python代码示例-Python代码样例列表
  12. Photoshop CC2019安装教程
  13. Android更换字体
  14. Trie——BZOJ4567/Luogu3294 [Scoi2016]背单词
  15. 《塞尔达传说》与氛围游戏的兴起:在游戏中感受禅意
  16. C# 开发ModBus的服务器程序 实现ModBus数据总站 搭建自定义的Modbus服务器 同时支持tcp和rtu...
  17. python图片数字识别_python 识别图片上的数字
  18. 小松鼠邮件(squirrelmail)服务器部署(squirrelmail+Postfix)
  19. 2019年8月13日 星期二 本周计划
  20. 抗锯齿和走样(笔记)

热门文章

  1. MySQL数据库约束(非空,唯一,默认,主键,外键约束)
  2. 结合LayoutIt学习Bootstrap的探索
  3. 二阶偏微分方程matlab解答,二阶椭圆偏微分方程实例求解(附matlab代码).docx
  4. 天线匹配与人体之间的关系
  5. 谷歌Android flash,取消支持Flash 谷歌TV升级安卓4.2.2
  6. 单循环链表和双向循环链表
  7. linux 下spi的使用 ,cc2500模块驱动
  8. pygame基础教程
  9. 第二章:HLK-7621开发板介绍
  10. 十折交叉验证python_k折交叉验证(matlab和python程序实现)