java 水晶报表教程_WEB开发中水晶报表的使用心得
[需求]
最近在项目开发过程中,客户要求用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开发中水晶报表的使用心得相关推荐
- java 德文转码_web开发中的JAVA字符转码
二.基本概念 2.1 JAVA中字符的表达 JAVA中有char.byte.String这几个概念. char 指的是一个UNICODE字符,为16位的整数.java抓取网页保存的乱码问题解决 byt ...
- java web水晶报表_WEB开发中水晶报表的使用心得
[需求] 最近在项目开发过程中,客户要求用Crystal Reports生成pdf格式的报表,并实现自动打印功能. [实施索引] 1.创建水晶报表: 2.Java中利用报表组件包将报表结果生成pdf: ...
- 【前端实例代码】使用 HTML CSS实现指纹扫描仪特效动画效果 |前端开发 网页制作 基础入门教程 网页开发中常见的样式与特效,收藏起来肯定用的上~
b站视频演示效果: [web前端特效源码]使用 HTML CSS 和 JavaScript 实现指纹扫描仪特效动画效果 |前端开发 网页制作 基础入门教程 效果图: 完整代码: <!DOCTYP ...
- java web开发菜鸟教程_Web开发的入门指导
你点开此文,说明你对Web开发是有兴趣的,或者你正在思考开始学习Web开发.在这里,我会告诉你成为一名Web开发者的路线,是对初学者关于Web开发的指导.这篇文章不会教你如何写代码,而是指出在你在真正 ...
- java遍历对象属性_java开发中遍历一个对象的所有属性并set值 缓存优化
今天技术之家陪你一起了解java开发中遍历一个对象的所有属性并set值 缓存优化: Java反射 1.创建缓存池,可以加快访问速度private static final Map> CACHE ...
- java opencv bytearray转mat_OpenCV开发中的内存管理问题
点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 引子 2020年第二篇技术文章,最近比较忙,事情比较多,搞了一个新的系列技术文章,还没有完整的搞好,抽空写一篇 ...
- java 逻辑或 作用_Java开发中与之间的区别,你真的知道吗?
&与&& 首先来讲一下&&,这个在java逻辑运算符里面被称为短路与,它与&逻辑与只差了一个& ,但是区别却很大,它的作用是如果前面的表达式运行 ...
- java vector编程_Java编程开发中向量(Vector)及其应用
要学习Java编程开发中向量及其应用方面的知识就要先了解什么是向量,向量是如何声明及初始化的,下面就让IT培训网专家来给大家详细介绍下如何认识向量及其使用方法吧! 关于向量的介绍: 向量 vector ...
- java css路径_java web开发中CSS路径有问题吗,运行jsp文件为什么找不到css文件?...
---------------------------------------------------------------------------------------------------- ...
- idea java 快捷键_图示Javahtml5开发中IDEA的一些常用默认快捷键
IDEA全称为IntelliJ IDEA,主要用于以Java语言开发为基础的集成环境,也可以用于诸如html5之类与Java Web系列相关的语言或框架开发:IntelliJ IDEA在编写代码时有一 ...
最新文章
- 如何学习网络协议(学习笔记)
- [BZOJ2326] [HNOI2011] 数学作业 (矩阵乘法)
- 腾讯的一笔画游戏--巧妙解法
- 【bzoj1565】[NOI2009]植物大战僵尸 【网络流】【最大权闭合子图】
- springboot幂等性_请问,springboot项目支付接口设计,如何保证支付的幂等性,并能给前端反馈友好的提示?...
- windows下成功安装XGBOOST
- Jcreator教程
- 图形验证码实现(代码)
- SQL基础教程学习第一站:PostgreSQL下载安装以及如何创建并登录数据库
- java实现令牌桶算法
- python代码示例-Python代码样例列表
- Photoshop CC2019安装教程
- Android更换字体
- Trie——BZOJ4567/Luogu3294 [Scoi2016]背单词
- 《塞尔达传说》与氛围游戏的兴起:在游戏中感受禅意
- C# 开发ModBus的服务器程序 实现ModBus数据总站 搭建自定义的Modbus服务器 同时支持tcp和rtu...
- python图片数字识别_python 识别图片上的数字
- 小松鼠邮件(squirrelmail)服务器部署(squirrelmail+Postfix)
- 2019年8月13日 星期二 本周计划
- 抗锯齿和走样(笔记)
热门文章
- MySQL数据库约束(非空,唯一,默认,主键,外键约束)
- 结合LayoutIt学习Bootstrap的探索
- 二阶偏微分方程matlab解答,二阶椭圆偏微分方程实例求解(附matlab代码).docx
- 天线匹配与人体之间的关系
- 谷歌Android flash,取消支持Flash 谷歌TV升级安卓4.2.2
- 单循环链表和双向循环链表
- linux 下spi的使用 ,cc2500模块驱动
- pygame基础教程
- 第二章:HLK-7621开发板介绍
- 十折交叉验证python_k折交叉验证(matlab和python程序实现)