在实际项目中,经常会遇到打印的需求,而对于打印的特殊需求也越来越多,例如需要记录上次打印位置,当前打印时根据上次的打印位置继续打印的功能,像银行的存折的数据每次打印都不是用新的纸张,而是根据上次打印的位置继续打印。

在润乾的打印功能中如何实现上述需求呢?

大致思路:首先润乾提供了打印后调用的 js 函数 runqian_printOver(),打印结束后调用 runqian_printOver() 计算下这次打印的最后一页高度以及报表名称等相关参数统一插入到库里。再次访问时候,根据相关的字段取出相应的记录对当前 raq 插入空白一行并且设置行高存成新的 raq 文件,然后通过标签里面的 printedRaq 属性打印修改后的 raq。来实现记录打印的功能。

首先随意准备一张可以展现多页数据的报表(增加了个参数模板,通过选择不同参数产生不同数据来模拟多次打印的功能)。

因为要进行打印记录的相关数据插入到数据库,创建一张数据库表用来存放报表名称、最后一页的行高、参数、状态等信息(具体需要插入哪些参数根据具体需求决定,例子中只用报表名称作为标识进行查询),表结构如下。

REPORTNAME          VARCHAR2(20)         Y

ROWHEIGHT            NUMBER                   Y

在展现报表前先要进行查询是否有打印记录,如果有的话读取行高数对当前报表进行插入一行并且设置行高再另存为一张新的 raq,然后通过标签中的 printedRaq 属性(打印的报表,此属性用于显示报表和打印报表不同)打印修改后的 raq。(由于此属性只能存放具体 raq,所以不能使用 reportdefine 的形式,需要将报表对象另存为成一个 raq 文件)。如果没有记录则正常流程。

// 查询是否有过记录,如果有过记录取得最后一页行高插入到报表第一行,然后将新报表存放在标签里的 printedRaq 属性

Connect connect = new Connect();

ResultSet res = connect

.executeQuery(“select * from PRINTMEMORY t where t.reportname = ‘”

+ report + “‘”);

// 如果数据库中没有记录则代表第一次打印,如果有记录进行计算

if (res.next()) {

// 读取历史打印位置(行高)插入到报表第一行

reportTemp = “temp” + report;

float rowHeight = res.getFloat(“ROWHEIGHT”);

System.out.println(“取历史打印位置:” + rowHeight);

ReportDefine rd = (ReportDefine) ReportUtils.read(application

.getRealPath(reportFileHome + File.separator + report));

rd.insertRow(1, 1);

rd.getRowCell(1).setRowHeight(rowHeight);

ReportUtils.write(application.getRealPath(reportFileHome

+ File.separator + reportTemp), rd);

} else {

System.out.println(“第一次打印”);

reportTemp = report;

}

在打印结束后会自动调用润乾内置函数 runqian_printOver(),重写 runqian_printOver() 函数内容,通过 ajax 或者直接嵌入 java 代码进行对数据库表插入或修改行高记录。

在后台 servlet 中进行行高的计算以及数据的更改:

传入参数为打印的报表(注意不是浏览的报表)即标签中 printedRaq 属性的报表名称,以及相关的参数。

然后通过 pagebuilder 进行分页计算,取最后一页,逐行遍历获取累计行高数。

float rowHeight = 0;

for (int i = 1; i <= ireport.getRowCount(); i++) {

rowHeight = rowHeight + ireport.getRowCell(i).getRowHeight();

}

最后根据报表名判断是否是第一次打印,分别对数据库数据进行 insert 和 update 操作。

ResultSet res = connect

.executeQuery(“select * from PRINTMEMORY t where t.reportname = ‘”

+ reportName + “‘”);

// 有记录 update,无记录 insert

if (res.next()) {

connect.executeUpdate(“UPDATE printmemory SET rowheight = “

+ rowHeight + ” WHERE reportname = ‘” + reportName + “‘ “);

} else {

connect.executeInsert(“INSERT INTO printmemory VALUES (‘”

+ reportName + “‘, ”, ”, ” + rowHeight + “)”);

}

标签:rowHeight,报表,记录,银行存折,打印,打续,raq,行高

来源: https://blog.csdn.net/rqgxy/article/details/91047619

java实现续打功能_银行存折套打续打功能 -- 报表如何记录上次打印的位置相关推荐

  1. java实现续打功能_银行存折套打续打功能--报表如何记录上次打印的位置

    在实际项目中,经常会遇到打印的需求,而对于打印的特殊需求也越来越多,例如需要记录上次打印位置,当前打印时根据上次的打印位置继续打印的功能,像银行的存折的数据每次打印都不是用新的纸张,而是根据上次打印的 ...

  2. java 银行管理系统怎么储存账户信息_银行管理系统 实现用户注册 登录 存、取款 交易记录查询和修改用户信息等功能...

    ========= 项    目   介   绍======== 银行账户管理系统 本项目主要实现用户注册 登录 存.取钱和修改用户信息功能. 用户信息的存储和获取通过集合和IO输入输出流实现. 存钱 ...

  3. java商品搜索功能_利用solr实现商品的搜索功能(实例讲解)

    后期补充: 为什么要用solr服务,为什么要用luncence? 问题提出:当我们访问购物网站的时候,我们可以根据我们随意所想的内容输入关键字就可以查询出相关的内容,这是怎么做到呢?这些随意的数据不可 ...

  4. Java旅游项目线路收藏_基于JavaWeb的旅游项目--详情功能

    文章目录 1.详情功能---界面展示 2.详情功能--后台代码 RouteServiceTest 扩展Route实体类 Seller.java RouteImg.java RouteService 查 ...

  5. java语言计算器怎么写_求助,一个计算器的括号功能怎么写啊。

    求助,一个计算器的括号功能怎么写啊. import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java. ...

  6. JAVA给banking作界面_银行运行模拟编程 求助!!!

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 public CheckingAccount(double bal, double protect) public CheckingAccount(dou ...

  7. java如何调用手机拍照功能_手把手教你如何实现拍照功能

    实现手机拍照功能,纯JS书写 First: 先上图为主,再做详细讲解: 需要注意的是这里的摄像头是主要是通过浏览器中的一个叫做Navigator属性在JS代码运行时打开页面自动开启 不明白?直接上代码 ...

  8. java接收任意键继续_正确实现“按任意键继续”功能

    在大家写程序的时候,经常会遇到"按任意键继续"这样的功能.网上能找到的方法主要有两种: 1. 使用 _getch() 语句 2. 使用 system("pause&quo ...

  9. java实现商品的分类_电商网站首页商品分类列表功能实现

    首先我们看下这个功能实现的效果: 后期理解补充: 其实这个功能的关键点就是分析这个模块的数据格式怎么样的? 对于这种商品列表展示的功能: 我们思路如下: 第一:开始展示的都是顶级列表,即parentI ...

  10. java mysql vo mybatis 分页_使用mybatis-plus如何实现分页查询功能

    使用mybatis-plus如何实现分页查询功能 发布时间:2020-11-06 17:34:12 来源:亿速云 阅读:538 作者:Leah 今天就跟大家聊聊有关使用mybatis-plus如何实现 ...

最新文章

  1. 单细胞10x的数据读取不进去怎么办?
  2. C 语言内存区域分配(进程的各个段)详解
  3. Odoo10 启动选项
  4. 深入浅出Netty之四 Client请求处理
  5. file input 点击没反应_动态input file多文件上传到后台没反应的解决方法!!!
  6. 为什么要用!DOCTYPE声明
  7. VB 泛型 T 应用
  8. 网络图结构中节点度分布的散点图
  9. 前端工程师的价值体现在哪里?
  10. 第二章:x264视频制作meGUI工具安装
  11. ubuntu 完整学习资料
  12. 上网行为安全之流量管理技术
  13. python读取一个文件夹下所有图片_初学Python-找出文件夹下的所有图片
  14. Qt 6.2的下载和安装
  15. P4556 [Vani有约会]雨天的尾巴(线段树合并)
  16. 爬取网易云音乐评论2
  17. 笔记本和利用服务器算力直连,使用闲置服务器的CPU算力挖掘Monero—Windows篇
  18. 最新虚拟机SAP ECC6.0 EHP7带示例数据IDES版+BW740
  19. 微信小程序图片放大预览效果的实现,轮播图点击放大预览
  20. 句柄的本质/句柄是什么

热门文章

  1. 漫谈moosefs中cgi各项的意义
  2. Spark算子:RDD基本转换操作(2)–coalesce、repartition
  3. mysqludf_json将关系数据以JSON编码
  4. MySQL数据库迁移注意点
  5. linux视频教程之vi编辑器
  6. C++ boost 正则表达式用法
  7. msxml3.dll error '80072efd' 错误的解决办法
  8. Android的数据库(SQLite)学习
  9. 如何使用计算机小学生课件,小学生计算机课件
  10. 多线程与NSTimer