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在编写代码时有一 ...
最新文章
- Linux和windows中的换行符差异问题 LINUX的换行符在Windows记事本打开不换行或出现黑点
- Oracle:ORA-28000异常(帐户已被锁定),修改账号登录失败次数
- java中的列表栈链表_Java数据结构(栈,队列,双链表)
- [交互设计工具/原型创作工具]Axure RP Pro 5.0新特性 破解版 注册码
- k1658停运到什么时候_2020年春节快递几号停运 2020年春节快递停运时间电商春节放假通知...
- 基于STM32CUBEMX的淘晶驰串口屏通讯入门
- 如何把word默认新建文档的格式样式更改为常用的格式样式呢
- Java setlocale方法_setlocale函数怎么用?
- UE4_模型_Bound(边界)
- 基于PHP的简易教务管理系统
- MacOS High Sierra(10.13.6)上安装xcode10.2.1
- 【CV系列】昼夜图像区分算法
- 计算机视觉(十一):Keras Pipline与自定义模型
- 无线蓝牙耳机哪款音质好?目前音质最好的无线蓝牙耳机推荐
- 【庖丁解牛】成功解决nginx报错:bind() to 0.0.0.0:8090 failed (13: Permission denied)
- 数字图像处理(9): 图像缩放、图像旋转、图像翻转 和 图像平移
- 随机生成5个英文验证码,判断用户输入的是否正确不区分大小写
- Ubuntu设置屏幕分辨率
- Linux常用命令及解析
- [分布式]:分布式系统的CAP理论
热门文章
- idea热部署(更新jsp代码不用重编译Tomcat)
- Blazor使用PDFObject预览pdf文件
- 数学建模与数学实验 (MATLAB)
- IDL 读取葵花8(Himawari-8)HSD数据
- 葵花8号卫星数据简介与下载(一)——数据介绍与FTP下载
- DH算法图解+数学证明
- 计算机技能比赛试题,计算机技能竞赛比赛试题文字录入WORDEXCEL
- deepinv2 添加打印机_科学网-Deepin Linux虚拟PDF打印机的安装与妙用-黄健的博文
- 五子棋ai:极大极小搜索和α-β剪枝算法的思想和实现(qt和c++)(三)极大极小搜索和α-β剪枝算法
- 谷歌火狐等浏览器Flash安装失败,安装后进入网站仍提示未安装Flash