[需求]

最近在项目开发过程中,客户要求用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. Linux和windows中的换行符差异问题 LINUX的换行符在Windows记事本打开不换行或出现黑点
  2. Oracle:ORA-28000异常(帐户已被锁定),修改账号登录失败次数
  3. java中的列表栈链表_Java数据结构(栈,队列,双链表)
  4. [交互设计工具/原型创作工具]Axure RP Pro 5.0新特性 破解版 注册码
  5. k1658停运到什么时候_2020年春节快递几号停运 2020年春节快递停运时间电商春节放假通知...
  6. 基于STM32CUBEMX的淘晶驰串口屏通讯入门
  7. 如何把word默认新建文档的格式样式更改为常用的格式样式呢
  8. Java setlocale方法_setlocale函数怎么用?
  9. UE4_模型_Bound(边界)
  10. 基于PHP的简易教务管理系统
  11. MacOS High Sierra(10.13.6)上安装xcode10.2.1
  12. 【CV系列】昼夜图像区分算法
  13. 计算机视觉(十一):Keras Pipline与自定义模型
  14. 无线蓝牙耳机哪款音质好?目前音质最好的无线蓝牙耳机推荐
  15. 【庖丁解牛】成功解决nginx报错:bind() to 0.0.0.0:8090 failed (13: Permission denied)
  16. 数字图像处理(9): 图像缩放、图像旋转、图像翻转 和 图像平移
  17. 随机生成5个英文验证码,判断用户输入的是否正确不区分大小写
  18. Ubuntu设置屏幕分辨率
  19. Linux常用命令及解析
  20. [分布式]:分布式系统的CAP理论

热门文章

  1. idea热部署(更新jsp代码不用重编译Tomcat)
  2. Blazor使用PDFObject预览pdf文件
  3. 数学建模与数学实验 (MATLAB)
  4. IDL 读取葵花8(Himawari-8)HSD数据
  5. 葵花8号卫星数据简介与下载(一)——数据介绍与FTP下载
  6. DH算法图解+数学证明
  7. 计算机技能比赛试题,计算机技能竞赛比赛试题文字录入WORDEXCEL
  8. deepinv2 添加打印机_科学网-Deepin Linux虚拟PDF打印机的安装与妙用-黄健的博文
  9. 五子棋ai:极大极小搜索和α-β剪枝算法的思想和实现(qt和c++)(三)极大极小搜索和α-β剪枝算法
  10. 谷歌火狐等浏览器Flash安装失败,安装后进入网站仍提示未安装Flash